【问题标题】:Laravel 4.2 BIT datatype issueLaravel 4.2 BIT 数据类型问题
【发布时间】:2015-02-26 12:51:13
【问题描述】:

数据库表中有一个bit(1) 类型的列。但它没有像我预期的那样工作。

问题是

$invitee = new Invitee();
$invitee->name = "name1";
$invitee->email = "example@mail.com";
$invitee->isActive = 0;    // "b'0'", '0', false,   are also not working
$invitee->save();

我需要在isActive 列中输入一个零0,但每次我尝试使用0 添加记录时,它的值1

我在here. 中发现了一个问题。但答案并未描述问题的原因。很高兴有人能解释这个问题。

【问题讨论】:

  • 你确定你想要bit 似乎是boolean吗?
  • 是的,不能更改数据库:(
  • 你试过$invitee->isActive = "\0001";吗? MySQL 中的 BIT 的工作方式与 bool 不同,因此您无法检查 1 或 2。BIT(m) 值的范围为 1-64。如果您只插入一个 1,它将用零填充,例如,将值 b'101' 分配给 BIT(6) 列实际上与分配 b'000101' 相同。

标签: mysql laravel-4 bit


【解决方案1】:

拥有bit 类型字段意味着您在插入/更新该字段时需要使用原始值作为解决方法。

这是因为默认情况下 PDO 会绑定这些值并将它们视为字符串,因此bit 将导致1

DB::table('table')->insert(['bit_field' => 0]); // inserts 1
DB::table('table')->insert(['bit_field' => DB::raw(0)]); // inserts 0

如果可以的话,我建议将其更改为 tinyint

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2017-11-02
    • 2017-01-22
    • 2015-06-18
    • 1970-01-01
    • 2015-08-27
    • 2015-12-04
    • 2021-04-24
    相关资源
    最近更新 更多