2016-05-25 214 views
0

不幸的是,我所有的數據庫(和排序規則)都是utf8_general_ci,我最近才知道使用utf8_unicode_ci更好,因爲它支持更多的Unicode字符。在數據庫中轉換MySQL字符集(還有Mysqli字符集相關)

如果我使用phpMyAdmin通過菜單更改排序規則和數據庫表格字符集,是否會有任何問題?

另外,因爲我不知道字符集的重要性,所以我沒有在PHP中爲我的數據庫連接設置MySQLi字符集。我是否應該通過併爲我的所有連接做mysqli->set_charset("utf8")?它目前默認設置爲「latin1」。我認爲這可能是一個問題,因爲我存儲爲UTF8但接受latin1? (不過,我對我的HTML網頁,宣佈UTF8與

meta charset="utf-8" 

我也閱讀它可能會更好直來直去utf8mb4?再說一遍,我不會有什麼改變,與phpMyAdmin的問題,值得嗎?如果我幹什麼去utf8mb4做我必須做的mysqli->set_charset('utf8mb4')

謝謝!我真的應該的做到了這一點,開始。

回答

0

CHARACTER SET是字節編碼COLLATION是如何對字符進行比較(WHEREORDER BY)。

在構建表之後,無法對其中的任何一項進行平凡的更改。相反,您需要執行某種形式的ALTER,可能是ALTER ... CONVERT TO ...

字符集utf8mb4具有處理所有中文(utf8缺少一些字符)和表情符號(較新的表情符號)的優點。

覈對utf8_unicode_520_ci(或utf8mb4_unicode_520_ci字符集utf8mb4)是基於更新的Unicode標準,因此可以說是「最好的」可用的在MySQL。

所以,是的,

  1. ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci;
  2. 連接之後mysqli->set_charset('utf8mb4');
  3. 在HTML中,有<meta charset=UTF-8>

有一個機會,CONVERT TO會遇到 「重複鍵」,因爲_unicode_歸類的工作不同於* _general_ci。這不會發生在英國,並且不會發生在歐洲大部分地區。想到兩個例外:德文ß在某些UNIQUEPRIMARY列,以及任何由'非間距'重音和字母組成的重音字母。 (後者非常罕見。)