2017-06-19 42 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));