好的,所以我確保我的MySQL(5.1.61)數據庫是UTF8,表格是UTF8,字段是UTF8,MySQL客戶端的字符集設置爲UTF8。我可以成功地存儲和檢索UTF8條目。我還確保我的終端的編碼設置爲UTF8。包含UTF8字符的舊條目在UTF8數據庫中保存不正確
CREATE TABLE `cities` (
`name` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
問題涉及到數據庫中已存在的200,000個條目。看起來我們繼承了這個項目的人搞砸了很多編碼,實際上保存了一個字符串,如Hörby
爲Hörby
,其中Ã
和¶
是有效的UTF8字符。也就是說,MySQL正在接收一個UTF8字符串Hörby
,並將其存儲爲。這裏就是第一個條目是舊條目的一個例子,第二個是我們將「Hörby
」與一切將數據庫設置爲UTF-8:
mysql> INSERT INTO cities SET name = 'Hörby';
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM cities;
+----------+
| name |
+----------+
| Hörby | <--- old entry
| Hörby | <--- new entry
+----------+
我們能做些什麼給壓扁字符轉換爲他們曾經是什麼?我們現在已經準備好做任何事情,但重新輸入所有200,000條記錄是不可行的。
你有什麼辦法確定哪些記錄是「舊」記錄(在數據庫更改之前),哪些記錄是「新」? – eggyal
@eggyal:是的,大約99%的數據庫包含舊記錄。我們可以在此時手動重新添加新條目。 – JustinBull