在my.cnf中將MySQL默認字符集更改成UTF-8?

目前咱們在PHP中使用如下命令在咱們的應用程序中將字符集設置爲UTF-8html

因爲這有點開銷,咱們想將其設置爲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


#1樓

在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 性能


#2樓

對於最新版本的MySQL, spa

default-character-set = utf8

致使問題。 我認爲它已被棄用了。

正如Justin Ball在「 升級到MySQL 5.5.12而且如今MySQL沒法啓動 」中所說,你應該:

  1. 刪除該指令,你應該是好的。

  2. 而後您的配置文件(例如'/etc/my.cnf')應以下所示:

    [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8
  3. 重啓MySQL。

  4. 爲了確保您的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 | +----------------------+-----------------+

#3樓

此處列出的全部設置都是正確的,但這裏是最佳且充分的解決方案:

[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),詳細解釋了爲何你應該使用一個或另外一個選項。 考慮全部類型的字符集排序規則 :用於服務器,用於數據庫,用於鏈接,用於表,甚至用於列。

我但願這篇文章和文章將有助於澄清不明確的時刻。


#4樓

更改MySQL角色:

客戶

default-character-set=utf8

mysqld的

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/ |
 +--------------------------+----------------------------+

#5樓

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)
相關文章
相關標籤/搜索