php - 在 SQL 中,无法将二进制设置为 1

标签 php mysql sql

我在 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 == 49ASCII 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/

相关文章:

php - 许多测试用例覆盖一个功能 - phpunit

php - jira rest api 在创建问题时出错

php - 从 img 标签的 src 属性上传图像 JQuery AJAX PHP

mysql - 将以分钟为单位的数字 INT 转换为 MySQL 中的 TIME

Java将CSV文件读入数组但忽略第一行

php - 对可能不包含协议(protocol)的字符串运行 parse_url()

MYSQL查询获取日期差

php - Yii 1.1.x CDbHttpSession 错误 : CDbConnection failed to open the DB connection: could not find driver

php - search.php 页面返回错误

c# - 使用 SqlDataReader 执行一系列 SQL 查询