我在 MySQL 中创建了一个表,其二进制字段名称为“active”,默认设置为 NULL。
但是当我想用这个命令更新它时:
$update_users = $bdd -> query("UPDATE users SET `active` = 1 WHERE `id` = '$data1' LIMIT 1") or die(mysql_error());
该字段已更新为 31 !而不是 1。
我也试过
SET `active` = true
但结果相同。
p.s: 我已经使用 phpMyAdmin 界面设置了“active”(没有 SQL 语句),但这里是该字段的值:Type => binary(1)、Null => yes、Defaut => NULL
最佳答案
0x31
== 49
是 ASCII code字符'1'
。
该值存储在列中,但是 because of its type ,它以特殊格式返回:值中的每个字节都以其十六进制表示形式显示(2 大写 hex digits )。根据您使用的 MySQL 客户端,输出中可能会出现 0x
十六进制前缀。
作为documentation解释说,BINARY
类型包含字符串(类似于 CHAR
类型)。这就是为什么您要插入的数值 (1
) 被作为字符串处理,并成为字符 '1'
)。
为了将数字 1
存储到 BINARY
列中,您必须在其中存储字符 '0x01'
:
UPDATE users SET `active` = 0x01 WHERE `id` = '$data1' LIMIT 1
或者您最好使用 TINYINT
类型。
关于php - 在 SQL 中,无法将二进制设置为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264763/