我只想将所有内容默认为utf8。我查了this question但没有任何帮助。
目前,我的/etc/my.cnf
是
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
但是当我重新启动服务器,创建一个新数据库时,它仍然是latin1(character_set_database
和character_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 ,是否可能?
答案 0 :(得分:0)
这很棘手。
默认数据库的字符集和排序规则可以是 根据{{1}}和{的值确定
character_set_database
系统变量。服务器设置这些变量 每当默认数据库发生更改时如果没有默认值 数据库中,变量具有与对应的相同的值 服务器级系统变量collation_database
和character_set_server
。
因此可以假设collation_server
的默认值与collation-database
变量的默认值相同。
请检查以下内容:
是否有其他配置会覆盖您的my.cnf,例如collation-server
或/etc/mysql/mysql.cnf
?
客户端(不是服务器!)在启动时设置自己的排序规则,因此您可以通过~/.my.cnf
(不是[mysql]
)设置客户端排序/编码,或者查看是否已经设置在某处。
您执行mysqld
- 这是查询基于SHOW VARIABLES ...
的变量,尝试通过SESSION
明确查询全局设置