php读取mysql位字段返回奇怪的字符

use*_*196 8 php mysql utf-8

我正在使用mysql_fetch_assoc($query),其中一个位字段返回,这应该是真的.
问题是我还需要将它输出到xml,它是一个非法的xml字符.db表的charset是utf-8.为什么会这样?

Mar*_*c B 14

MySQL实际上为位字段返回0x00和0x01.你必须将它们转换成适合PHP端的东西

$bitvalue = ($bitvalue == 0x01) ? 'TRUE' : 'FALSE'
Run Code Online (Sandbox Code Playgroud)

或者在查询中:

SELECT CAST(bitfield AS unsigned int)
FROM ...
Run Code Online (Sandbox Code Playgroud)

它会将其转换为int并返回为'0'和'1'(0x48和0x49).

顺便说一句,一些较旧的mysql库预先支持MySQL中的真实位字段(当它们被静默转换为char(1)时)并且会丢弃这些值,所以如果你遇到其中一个恐龙版本,您可能必须使用查询版本而不是PHP端转换.


小智 7

你也可以使用:ord($bitvalue).