2016-06-09 51 views
0

我搜查了一些意見,只說明他們從latin轉換爲utf8,請問我可否使用latin_swedish_ci?它與英文字符沒有什麼不同,是這樣嗎?此外,如果我的網絡應用有meta-charsetUTF-8,我正在使用latin_swedish_ci collation,它會影響什麼嗎?我想要你對此的看法。可以使用默認排序規則(latin_swedish_ci)嗎?

回答

2

A CHARACTER SET是指字符編碼的方式。 A COLLATION引用字符比較的方式(用於相等或排序)。對於每個字符集,都有一個可能的歸類列表。 (西班牙語和德語有一些顯着的變化。)

兩個字符集latin1utf8對英文文本進行相同的編碼。所以,如果你只使用英文,那麼CHARACTER SET並不重要。即使這兩個字符集的默認排序規則對英文也是一樣。

如果您使用其他語言,甚至表情符號,提出的問題就變得很重要。

應用程序客戶端和MySQL服務器通常可以使用不同的字符集。轉換將自動發生。 但是,你必須告訴MySQL應用程序字節正在使用什麼字符集。 (這同樣適用於英語,這並不重要)。這取決於客戶端(Java,PHP,VB,Python等等)以各種方式完成。

1

我強烈建議您使用utf8mb4而不是latin_swedish_ci甚至utf8

即使latin_swedish_ci支持所有英文字母,它可以,你會最終踢你的屁股。例如,姓名,地址和更多的東西可以包含其他字符,這可能會弄亂您存儲的數據,甚至更糟的是可能會產生明顯的錯誤!

那麼,爲什麼不只是utf8你會問?因爲在MySQL中utf8使用3個字節來存儲一個字符並且不能存儲每個utf-8字符,所以您需要4個字節,因此您需要utf8mb4。如果您必須處理用戶條目,並且移動用戶決定將某些表情符號作爲條目放入,這可能會讓您陷入尷尬境地。給我一些時間。

不要問我爲什麼MySQL以這種方式搞砸了整個unicode的事情,我不知道......也許同樣的原因latin_swedish_ci是默認的。

一般來說,使用完整的Unicode相關的一切文本,你是安全的。網絡龐大而且國際化,存儲空間足夠便宜。現在即使你不需要它,你也會爲未來做好準備。

相信我在這種情況下。我毫無準備地陷入這類問題,不得不通過艱難的方式來學習;)

我知道這個問題有點古怪,但我會在未來留給所有其他人的答案。