Mysql 5.5如何设置utf8的一切?

时间:2016-12-14 13:54:17

标签: mysql

我只想将所有内容默认为utf8。我查了this question但没有任何帮助。

目前,我的/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)

当我创建数据库时,它是latin1:

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 ,是否可能?

1 个答案:

答案 0 :(得分:0)

这很棘手。

  

默认数据库的字符集和排序规则可以是   根据{{​​1}}和{的值确定   character_set_database系统变量。服务器设置这些变量   每当默认数据库发生更改时如果没有默认值   数据库中,变量具有与对应的相同的值   服务器级系统变量collation_database和   character_set_server

因此可以假设collation_server的默认值与collation-database变量的默认值相同。

请检查以下内容:

  1. 是否有其他配置会覆盖您的my.cnf,例如collation-server/etc/mysql/mysql.cnf

  2. 客户端(不是服务器!)在启动时设置自己的排序规则,因此您可以通过~/.my.cnf(不是[mysql])设置客户端排序/编码,或者查看是否已经设置在某处。

  3. 您执行mysqld - 这是查询基于SHOW VARIABLES ...的变量,尝试通过SESSION明确查询全局设置