我有一個數據庫用於存儲非英文字符的PHP應用程序,例如:ç ã é
。MySQL將錶轉換爲latin1不會將外部字符轉換爲正確的表示
以前,該數據庫已存儲並正確顯示這些字符,但在備份和恢復後,在他們的地方的某些字符被替換像çã
組合時,它應該顯示Ç
顯然,這是一個備份或恢復charset疏忽,但我無法檢索以前的數據庫的好版本。
該轉儲文件是數據庫的所有剩餘部分,並且在文本編輯器中打開時,它也顯示組合012,代替çã
。
我試過將其中一個表從utf8_unicode_ci轉換爲latin1_swedish_ci,反之則無效。
ALTER TABLE test CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE test CONVERT TO CHARACTER SET latin1 COLLATE latin1_swedish_ci;
我該如何解決這個問題。
謝謝。
注:utf8_decode
從PHP能夠çã
轉換爲ça
,但我想,從源頭上解決這個問題。
更新:我能夠查詢受影響的表,並將它與下面的查詢返回正確的字符。
SELECT convert(cast(convert(field_name using latin1) as binary) using utf8) FROM affectedTable
更新2:
查詢波紋管能夠將字符轉換成其適當的UTF-8表示。
SELECT convert(cast(convert(field_name using latin1) as binary) using utf8) FROM affectedTable
因此按照上述查詢的方法,如果您運行遵循三個查詢每個表的影響,應該將字符轉換爲UTF-8。
ALTER TABLE table CONVERT TO CHARACTER SET latin1;
ALTER TABLE table CONVERT TO CHARACTER SET binary;
ALTER TABLE table CONVERT TO CHARACTER SET utf8;
那它,像çã
字符將被轉換爲ça
等。
這與MySQL 5.6.20 - 社區服務器在Windows上,它沒有與MySQL 5.5.42 - Linux上的社區服務器。也許有人知道這個交叉版本/操作系統解決方案。
否。「CONVERT TO CHARACTER SET」僅用於將_zone _字符的charset和內容從latin1改爲utf8。 ''''意味着別的東西。 –