2010-10-19 89 views
7

幾年前設計我的應用程序數據庫時出現了錯誤,並且我的表和表字段的排序規則設置混合在一起。其中一些是utf8_general_ci,其中一些是utf8_unicode_ci。將utf8_general_ci表和字段轉換爲utf8_unicode_ci

當連接具有不同排序規則的表時,這會導致問題。現在,我打算更改排序規則設置並使它們相同:utf8_unicode_ci。我將在我所有的表上運行這兩個SQL查詢。

ALTER TABLE `table1` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
ALTER TABLE `table1` CHANGE `Action` `Action` VARCHAR(250) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL; 

我的問題是,運行這兩個SQL查詢是否打破任何字段值,尤其是包含重音字符的字段值?或者運行這兩個查詢是否安全?

期待您的來信。

感謝您的回答!

回答

5

請參考MySQL的文檔其中談到改變字符集和校對

http://dev.mysql.com/doc/refman/5.1/en/charset-column.html

它說 - 「如果你使用ALTER TABLE來一列從一個字符集轉換成另一種時,MySQL試圖映射數據值,但如果字符集不兼容,則可能會丟失數據。「

- 乾杯

+0

謝謝你的親切回答。 – TamTam 2010-10-19 11:42:58

+1

雖然這兩種字符編碼是兼容的。實際上,它是完全相同的字符編碼,只是在排序時比較它們的一種不同方式。列上的任何索引都可能需要重建,就是這樣。 – thomasrutter 2012-03-20 22:42:49

5

整理僅影響字段中的字符串如何比較,而不是如何存儲。就你用utf8編碼而言,你是安全的。

+1

是的,這是正確的。有細微的排序和比較差異,如德國'ß'='ss'等,但沒有數據會改變。有關詳細信息,請參見http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html – 2010-10-19 11:34:32

+1

夥計們,請查看此鏈接(http://dev.mysql.com/doc/refman/ 5.1/en/charset-column.html)Koteswasa在下面提到。謝謝你的時間。 – TamTam 2010-10-19 11:43:58

+0

我站好了。仍然在相同的編碼內,切換整理是安全的。 – Mchl 2010-10-19 12:17:31

相關問題