目前咱們在PHP中使用如下命令在咱們的應用程序中將字符集設置爲UTF-8 。 html
因爲這有點開銷,咱們想將其設置爲MySQL中的默認設置。 咱們能夠在/etc/my.cnf或其餘地方這樣作嗎? mysql
SET NAMES 'utf8' SET CHARACTER SET utf8
我在/etc/my.cnf中找了一個默認的字符集,可是沒有關於字符集的內容。 git
此時,我執行如下操做將MySQL字符集和校對變量設置爲UTF-8: github
skip-character-set-client-handshake character_set_client=utf8 character_set_server=utf8
這是處理這個問題的正確方法嗎? sql
在Xubuntu 12.04下我簡單地補充道 數據庫
[mysqld] character_set_server = utf8
到/etc/mysql/my.cnf ubuntu
結果是 服務器
mysql> show variables like "%character%";show variables like "%collation%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec)
另請查看http://dev.mysql.com/doc/refman/5.6/en/charset-server.html 性能
對於最新版本的MySQL, spa
default-character-set = utf8
致使問題。 我認爲它已被棄用了。
正如Justin Ball在「 升級到MySQL 5.5.12而且如今MySQL沒法啓動 」中所說,你應該:
刪除該指令,你應該是好的。
而後您的配置文件(例如'/etc/my.cnf')應以下所示:
[mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8
重啓MySQL。
爲了確保您的MySQL是UTF-8,請在MySQL提示符中運行如下查詢:
第一個查詢:
mysql> show variables like 'char%';
輸出應以下所示:
+--------------------------+---------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/| +--------------------------+---------------------------------+
第二個查詢:
mysql> show variables like 'collation%';
查詢輸出是:
+----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_unicode_ci | | collation_server | utf8_unicode_ci | +----------------------+-----------------+
此處列出的全部設置都是正確的,但這裏是最佳且充分的解決方案:
[mysqld] init_connect='SET collation_connection = utf8_unicode_ci' character-set-server = utf8 collation-server = utf8_unicode_ci [client] default-character-set = utf8
將這些添加到/etc/mysql/my.cnf
。
請注意,因爲性能問題,我選擇utf8_unicode_ci類型的排序規則。
結果是:
mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_unicode_ci | | collation_database | utf8_unicode_ci | | collation_server | utf8_unicode_ci | +----------------------+-----------------+
這是當您做爲非SUPER用戶鏈接時!
例如,做爲SUPER和非SUPER用戶的鏈接之間的區別(固然在utf8_unicode_ci整理的狀況下):
超級私人用戶:
mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | <--- | collation_database | utf8_unicode_ci | | collation_server | utf8_unicode_ci | +----------------------+-----------------+
非SUPER私人用戶:
mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_unicode_ci | | collation_database | utf8_unicode_ci | | collation_server | utf8_unicode_ci | +----------------------+-----------------+
我寫了一篇全面的文章 (rus),詳細解釋了爲何你應該使用一個或另外一個選項。 考慮全部類型的字符集和排序規則 :用於服務器,用於數據庫,用於鏈接,用於表,甚至用於列。
我但願這篇文章和文章將有助於澄清不明確的時刻。
更改MySQL角色:
default-character-set=utf8
character_set_server=utf8
咱們不該該在mysqld中寫default-character-set=utf8
,由於這可能會致使以下錯誤:
開始:做業沒法啓動
最後:
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
MySQL 5.5,你只須要:
[mysqld] character_set_client=utf8 character_set_server=utf8 collation_server=utf8_unicode_ci
collation_server
是可選的。
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)