2010-05-26 28 views
8

我正在使用mysql_fetch_assoc($query),其中一个位字段返回为假,这应该是真实的。
问题是,我也需要输出到XML,它是一个非法的XML字符。 db表的字符集是utf-8。为什么会发生?php读取mysql位字段返回奇怪字符

回答

14

MySQL是字面上的位字段返回为0x00和0x01。你必须把它们转换成合适的东西或者PHP端

$bitvalue = ($bitvalue == 0x01) ? 'TRUE' : 'FALSE' 

或查询:

SELECT CAST(bitfield AS unsigned int) 
FROM ... 

,将其转换为int和返回为“0”和“1” (0x48和0x49)。就像旁白一样,一些较老的mysql库在MySQL中实时位域的支持(当它们被默认转换为char(1)时),并且会丢弃这些值,所以如果你被卡住了这些恐龙版本之一,你可能不得不使用查询版本,而不是PHP端转换。

+1

你也可以通过'SELECT bitfield + 0'来强制转换为int。这样做还是使用'CAST()'有什么区别? – Mike 2013-12-10 22:12:08

+1

为了保证二进制安全,还可以使用'$ bitvalue =($ bitvalue === chr(0x01))',它可以将'true'或'false'赋值给'$ bitvalue'。 – 2015-07-05 15:00:01

+0

@StanimirStoyanov你为我工作过 – 2015-10-15 23:59:05

6

您还可以使用:ord($bitvalue)

+1

感谢您的贡献,但我认为这应该是对马克B的回答的评论 - 这个答案并不孤单。 – Day 2012-10-21 11:21:57

+0

这不提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你可以随时评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/faq#reputation),你将能够[评论任何帖子](http://stackoverflow.com/privileges/comment)。 – Day 2012-10-21 11:22:21

+0

@Day对我来说这似乎是一个足够好的答案。 – Mike 2013-12-10 21:18:33