我在MySQL的bit(16)
字段中保留用户帐户的类型。所选用户类型的所有查询都可以正常工作:SELECT * FROM users WHERE type & 8
- 提供良好的结果。
我正在$_SESSION
我的行,但在那之后$_SESSION['userdata']['type'] & 8
给了0
.为什么?
var_dump($_SESSION['userdata'])
给了... ["type"]=> string(2) "" ...
所以看起来很好。
知道为什么它不起作用以及如何修复或至少调试它吗?
站点编码UTF8
,php文件的编码UTF8
,数据库编码UTF8
,数据库连接编码UTF8
。
bindec()
PHP 函数没有帮助。它返回 0。
由于没有答案可以接受,我会自己回答,因为这可能对其他人有用。
在MySQL中使用bit
字段类型时,PHP将其转换为字符串。因为,默认情况下,PHP 不会威胁字符串作为二进制数,它只是在尝试执行一些按位操作时将其转换为 0。不知道为什么,但bindec()
功能似乎无法正常工作,因此有两个选项:
- 在 MySQL 查询中将
bit
字段转换为整数,只需向其添加+0
,如下所示:SELECT bit_field+0 FROM table
- 将字段更改为
unsigned int
。它将以与bit
相同的方式使用,但将返回正确的值而无需任何转换。
至于效率 - 据我所知,int
s 与 bit
s 保持相同的形式,按位运算以完全相同的方式进行,因此它应该是可比的。
感谢所有评论这个问题的人。