我正在將數據庫從mysql遷移到postgresql。 MySQL數據庫的默認排序規則是UTF8,postgres也使用UTF8,而我使用pg_escape_string()對數據進行編碼。無論出於何種原因,不過,我遇到了不好的編碼一些時髦的錯誤:PostgreSQL + PHP + UTF8 =用於編碼的無效字節序列
pg_query() [function.pg-query]: Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xeb7374 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client"
我一直在關注着試圖弄清楚這一點,並注意到PHP是做一些奇怪的;如果一個字符串中只有ascii字符(例如「hello」),則編碼爲ASCII。如果字符串包含任何非ASCII字符,則表示編碼是UTF8(例如「Hëllo」)。
當我在已經是UTF8的字符串上使用utf8_encode()時,它殺死了特殊字符,並使它們全部搞砸了,所以......我能做些什麼才能使它工作?
(確切的字符,現在掛起來的「」,但不是隻查找/替換,我想找到一個更好的解決方案使這個有點問題不會再次發生)
經過幾個小時的玩弄之後,我實際上開始認爲mysql已經允許非utf8字符串進入數據庫,這是什麼導致的問題.. – Ian