我使用PHP函数serialize来序列化一个大字符串的对象,在字符串中有一个特殊字符“ - ”。当数据库使用latin1字符集时,该对象被保存,现在我将数据库迁移到UTF-8。PHP函数反序列化在charset更改后停止工作(从latin1到UTF-8)
我使用PHP函数unserialize来取回对象,因为我将字符集更改为UTF-8,该函数停止工作。我不知道为什么。
我修改httpd.conf中使用:
AddCharset UTF-8 .utf8
AddDefaultCharset UTF-8
的php.ini:
default_charset = "UTF-8"
而且所有MySQL的数据转换为UTF-8。
UPDATE 我赶上了PHP的错误,当我调用反序列化功能:
unserialize(): Error at offset 19146 of 23672 bytes in /xxx/xxx.php:18
执行'SELECT col,HEX(col)...'向我们展示淘气角色的十六进制。这将有助于确定数据库中的数据是错误的还是从数据库获取数据后正在处理不正确的数据。 – 2015-04-01 18:56:20
HEX是E28094,谢谢瑞克。 – Tony 2015-04-02 15:29:53
看起来它是一个UTF-8字符(http://www.fileformat.info/info/unicode/char/2014/index.htm),所以mysql方面是正确的,并且问题出现在apache/php中? – Tony 2015-04-02 15:31:40