2010-05-26 42 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