2011-07-22 83 views
3

我需要將我的MySQL數據庫從latin1_sweedish_ci轉換爲utf8,它看起來像utf8_bin是我的理想選擇。我一直在閱讀,有些人已經導出了他們的數據庫並重新創建了它們。這真的有必要嗎?我無法運行查詢來轉換數據嗎?MySQL UTF8轉換 - 爲什麼要轉儲數據庫?

,我讀了一個人安裝MySQL 5時,MySQL的過程中指定UTF-8編譯...

+0

爲什麼不用'ci',而是'bin'? – zerkms

+0

從我讀過的內容來看,如果我在MySQL比較中不使用'utf8_bin','A =Ä'將返回true。 A!=Ä,所以我不希望它返回true。 – Webnet

+0

當然,你可以使用['CONVERT'](http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html)。 –

回答

1

你要導出數據庫,並將其轉換。設置數據庫,表格和行編碼會改變將來在上的操作方式,但不會轉換已存儲的數據。

沒有數據庫編碼交換免費午餐。

在MySQL 5中,您必須重置數據庫,表和列的所有字符編碼,然後重新導入數據。 wordpress guide to changing char sets是一個很好的一步一步的資源來做到這一點。

我建議閱讀WordPress的如何做的步驟是很好的解釋和明確,但亮點是:

集DB字符集:

ALTER DATABASE db_name CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

然後將現有的表編碼:

ALTER TABLE db_table CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

然後傾倒瓦特/一個編碼,重新導入與另一

mysqldump --user=username --password=password --default-character-set=latin1_swedish_ci dbname > dump.sql 

mysql --user=username --password=password --default-character-set=utf8 dbname < dump.sql 

請注意,如果您不想轉儲&重新加載整個數據庫,則可以逐列執行更改,方法是將每個文本列轉換爲等效的blob類型,然後將其轉換回文本列w/Wordpress指南的convert columns to blob and back中描述的所需編碼。

+0

'iconv'在這裏沒有必要。我甚至會說在這種情況下它是邪惡的。你已經給出了WP指南的鏈接,它並不使用'iconv' ;-)'然後轉換數據'--- ** NO **,數據應該保持原樣。 – zerkms

+0

@zerkms,感謝您的現實檢查。我從我以前的MySQL的舊腳本中提取了iconv。使用'mysqldump'步驟更新答案。 – shelhamer

+0

這好多了,然後+1 ;-) – zerkms

0

無需轉儲&重新加載。您可以讓MySQL對這些值進行轉碼,但是您必須針對每個包含文本數據的每列發出一個ALTER代碼。相當煩人,你必須寫一個腳本來生成它!之後,你仍然需要改變所有的默認值。

ALTER TABLE `foo` CHANGE `mycolumn` `mycolumn` 
TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL 
+0

因此,即使在運行該查詢我必須有一個腳本經過並編碼所有數據?是否有可能在MySQL中編碼數據? – Webnet

0
ALTER TABLE `foo` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

做所有的轉換對我來說,包括列,我需要做的,雖然是寫這個數據庫中的每個表。