2017-06-19 45 views
0

我有以下问题。我正在检索作为发票序列化文本的mysql文本字段。我在2个不同的项目中工作。两者都有相同版本的PHP。数据导出从db到db导入的&。如果我var_dump从db1的数据它告诉我它的长度是x。当我做同样在从DB2我得到X + 2php反序列化返回false

串(595) “一个:3:{S:11:” 的UserDetails “;一个:20:{S:4:” 姓名” S:3: “BAS”; S:8: “姓氏”; S:7: “施米茨”; S:5: “电子邮件”; S:17: “[email protected]”; S:6:”街道 “; S:11:” frstenwall “; S:7:” STREET2 “; S:0:” “; S:7:” 公司 “; S:0:” “S:3:” 拉链” ; 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:” 区域 “; S:3:” NRW “; S:10:” phone_code “; S:3:” 211 “; S:8:” fax_code “; S:0:”“; S :10: “称呼”; S:2: “MR”; 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;}”


串(597) “一个:3:{S:11:” 的UserDetails “;一个:20:{S:4:” 姓名 “; S:3:” BAS“; S 8: “姓氏”; S:7: “施米茨”; S:5: “电子邮件”; S:17: “[email protected]”; S:6: “街道”; S:11: “fürstenwall” ; S:7: “STREET2”; S:0: “”; S:7: “公司”; S:0: “”,S:3: “拉链”; 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:” 区域“; S:3: “NRW”; S:10: “phone_code”; S:3: “211”; S:8: “fax_code”; S:0: “”,S:10: “称呼”; S:2: “MR” ; 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;}“

正如我粘贴这些,我可以看到,显示德国字符时有区别

任何想法,为什么发生这种情况?

+0

你有相同字符集/编码在这两个数据库? – user2508811

+0

latin1_swedish_ci – user1840302

+0

为什么你使用瑞典语字符集,并希望得到正确的结果?使用utf8(甚至更好,utf8mb4)来防止这样的事情。还要确保你输出utf8,并且你的文件也有正确的字符集。 – walther

回答

0

serialize()输出不能以纯文本进行处理:

返回值

返回包含的值的字节流表示的是 可以存储在任何位置的字符串。

请注意,这是一个可能包含空字节的二进制字符串,并且需要像这样存储和处理。例如,serialize() 输出通常应存储在数据库中的BLOB字段中, 而不是CHARTEXT字段中。

因此,您的数据首先被损坏。

如果您无法更改数据库设计(这将是适当的修复),你需要在一个纯文本的编码重新编码序列化数据,如Base64编码:

$encoded = base64_encode(serialize($foo)); 
$decoded = unserialize(base64_decode($encoded));