我最初與latin1編碼和latin1_swedish_ci排序規則創建了一個龐大的數據庫。MySQL的字符編碼
我做了很多改變,現在我使用Doctrine2,該查詢之前使用SET NAMES UTF8
。我之前使用的是Yii框架,它也被設置爲使用UTF-8。基本上我在開始時忽略了所有這些,但從我的理解來看,我一直在向數據庫寫入UTF-8數據,儘管它們都被認爲是latin1。
我想我的數據庫轉換爲UTF-8,但不知道如何安全地做到這一點,並確保我不會丟失數據。
兩個問題:
有沒有一種方法,以確保我已經正確地做到了這一點?我有2 GB的數據,所以我不能通過掃描來測試,但是我可以查找某些字符以確定數據庫是否已經使用UTF-8?
什麼是一切轉換的正確方法?我見過一些人說我必須mysqldump並重新導入(使用某些標誌,http://blog.makezine.com/2007/05/08/mysql-database-migration-latin/和http://docs.moodle.org/22/en/Converting_your_MySQL_database_to_UTF8)。其他人說你可以每列
ALTER TABLE...
(http://www.bothernomore.com/2008/12/16/character-encoding-hell/)。我已經看到一些命令,如SET utf8
作爲ALTER TABLE
的一部分,但我不知道它是否有效。
編輯:
我甩了數據,並發現了幾個重音符號。這是否表明數據本身是UTF-8?如果是這樣,我htink這裏的說明適用,因爲我可以「轉換」成團塊,並安全返回地面http://codex.wordpress.org/Converting_Database_Character_Sets
再次編輯:
做什麼,我在以前的鏈接閱讀後,我發現比較數據,我在第一個非ascii(?)之後錯過了所有字符。所以我用捲曲的單引號設置了標題,新數據庫中包含該字符以及缺失後的所有字符。作爲一個例子,這裏是我正在運行的代碼:
ALTER TABLE articles CHANGE title title VARBINARY(255) NOT NULL;
ALTER TABLE articles CHANGE title title VARCHAR(255) CHARACTER SET utf8 NOT NULL;
不知何故,這導致我失去了數據。
但是如果我傾倒,每個表的字符集latin1和utf8的改變,它的工作原理。我寧願只是修改一些東西,而不是轉儲和重新創建,但如果沒有人有任何其他建議或想法基於此,我會採用它。
我有類似的問題。我使用HeidiSQL的批量維護功能。 – hjpotter92 2012-04-19 05:13:10