【问题标题】:php reading mysql bit field returning weird characterphp读取mysql位字段返回奇怪的字符
【发布时间】:2010-05-26 16:10:20
【问题描述】:

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

【问题讨论】:

    标签: php mysql utf-8


    【解决方案1】:

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

    【讨论】:

    • 感谢您的贡献,但我认为这应该是对 Marc B 答案的评论——这个答案并不独立。
    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
    • @Mike - 问题问“为什么会发生这种情况?”。这个“答案”没有回答那个问题。 Marc B 的回答确实回答了这个问题,这就是为什么它有更多的支持。
    • @Day 好点。但是,接受的答案实际上也没有回答。
    【解决方案2】:

    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 端转换。

    【讨论】:

    • 您也可以通过SELECT bitfield+0 强制转换为int。这样做或使用CAST() 有什么区别吗?
    • 为了保证二进制安全,也可以使用$bitvalue = ($bitvalue === chr(0x01)),它将truefalse分配给$bitvalue
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2017-07-04
      • 2018-03-11
      • 2019-07-27
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多