【发布时间】:2017-06-19 06:34:00
【问题描述】:
我有以下问题。我正在检索一个 mysql 文本字段,它是发票的序列化文本。我正在从事 2 个不同的项目。两者都有相同版本的 PHP。数据已从 db 导出和导入到 db。如果我 var_dump 来自 db1 的数据,它会告诉我它的长度是 x。当我在 db2 中做同样的事情时,我得到 x+2
字符串(595) "a:3:{s:11:"userdetails";a:20:{s:4:"name";s:3:"bas";s:8:"lastname";s:7:"schmitz" ;s:5:"email";s:17:"email@test.de";s:6:"street";s:11:"f�rstenwall";s:7:"street2";s:0 :"";s:7:"公司";s:0:"";s:3:"zip";s:5:"40215";s:9:"住宅";s:10:"d� 塞尔多夫";s:7:"国家";s:7:"德国";s:5:"电话";s:7:"3033185";s:3:"传真";s:0:""; s:10:"customerID";i:202771;s:2:"nr";s:3:"228";s:6:"region";s:3:"nrw";s:10:"phone_code ";s:3:"211";s:8:"fax_code";s:0:"";s:10:"称呼";s:2:"先生";s:5:"销售";s :0:"";s:12:"country_code";s:0:"";s:10:"vat_number";s:0:"";}s:6:"域";s:15:" bas-schmitz2.de";s:10:"has_domain";b:1;}"
字符串(597) "a:3:{s:11:"userdetails";a:20:{s:4:"name";s:3:"bas";s:8:"lastname";s:7:"schmitz" ;s:5:"email";s:17:"email@test.de";s:6:"street";s:11:"fürstenwall";s:7:"street2";s:0:" ";s:7:"公司";s:0:"";s:3:"zip";s:5:"40215";s:9:"住宅";s:10:"杜塞尔多夫";s :7:"国家";s:7:"德国";s:5:"电话";s:7:"3033185";s:3:"传真";s:0:"";s:10: "customerID";i:202771;s:2:"nr";s:3:"228";s:6:"region";s:3:"nrw";s:10:"phone_code";s: 3:"211";s:8:"fax_code";s:0:"";s:10:"称呼";s:2:"先生";s:5:"销售";s:0:" ";s:12:"country_code";s:0:"";s:10:"vat_number";s:0:"";}s:6:"domain";s:15:"bas-schmitz2。 de";s:10:"has_domain";b:1;}"
在粘贴这些内容时,我可以看到显示日耳曼字符时存在差异
知道为什么会这样吗?
【问题讨论】:
-
两个数据库中的字符集/编码是否相同?
-
latin1_swedish_ci
-
您为什么使用瑞典语字符集并期望得到正确的结果?使用 utf8(甚至更好,utf8mb4)来防止这样的事情。还要确保您输出 utf8 并且您的文件也设置了正确的字符集。
-
@user1840302 您的序列化字符串已损坏。例如,
email@test.de的字符串长度为 13,但您的序列化字符串已声明为 17。因此,PHP 无法反序列化损坏的字符串。
标签: php mysql serialization