2016-12-14 32 views
1

我只是希望一切都默認爲utf8。我檢查了this question,但沒有任何幫助。Mysql 5.5如何設置一切到utf8?

目前,我/etc/my.cnf

[mysqld] 
collation-server = utf8_unicode_ci 
init-connect='SET NAMES utf8' 
character-set-server = utf8 

但是,當我重新啓動服務器,創建一個新的數據庫,它仍然是latin1的(character_set_databasecharacter_set_server):

mysql> show variables like 'char%'; 
+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8      | 
| character_set_connection | utf8      | 
| character_set_database | latin1      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8      | 
| character_set_server  | latin1      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
8 rows in set (0.00 sec) 

mysql> show variables like 'collation%'; 
+----------------------+-------------------+ 
| Variable_name  | Value    | 
+----------------------+-------------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | latin1_swedish_ci | 
| collation_server  | latin1_swedish_ci | 
+----------------------+-------------------+ 
3 rows in set (0.00 sec) 

當我創建一個數據庫,這是拉丁文1:

mysql> create database d1; 
Query OK, 1 row affected (0.00 sec) 

mysql> use d1; 
Database changed 
mysql> show variables like "character_set_database"; 
+------------------------+--------+ 
| Variable_name   | Value | 
+------------------------+--------+ 
| character_set_database | latin1 | 
+------------------------+--------+ 
1 row in set (0.00 sec) 

當我創建一個表在這個數據庫中,它不能UTF8 識別有效:

mysql> create table t1(name varchar(1) default '啊'); 
ERROR 1067 (42000): Invalid default value for 'name' 

我知道alter database d1 character set utf8;會解決這個問題。但我只想一切都默認爲utf8,這可能嗎?

+0

查詢明確全局設置你試過默認字符集= UTF8 – Seb

+0

@Seb肯定的,但不能幫助 – tcpiper

回答

1

這很棘手。

的字符集和歸類爲默認數據庫可以從character_set_databasecollation_database系統變量的值來確定 。只要默認數據庫發生更改,服務器就會設置這些變量 。如果沒有默認的 數據庫,則這些變量具有與相應的服務器級系統變量 相同的值,character_set_servercollation_server

所以人們會假設collation-database的默認值與collation-server變量的默認值相同。

請檢查以下內容:

  1. 是否有將覆蓋你的my.cnf,像/etc/mysql/mysql.cnf~/.my.cnf任何其他配置?

  2. 客戶端(而不是服務器!)被設置在啓動自己的排序,所以你可以通過[mysql](未mysqld)設置一個客戶整理/編碼或看如果已經設置的地方。

  3. 你做SHOW VARIABLES ... - 這是查詢SESSION的變數,試圖通過SHOW GLOBAL VARIABLES ...

+0

是它是這樣的:'[mysql] collat​​ion-server = utf8_unicode_ci character-set-server = utf8'? – tcpiper

+0

http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html – DanFromGermany