0.概述
MySQL的字符集支持(Character Set Support)包括两个方面:
字符集(Character set)和排序方式(Collation)。
对于字符集的支持细化到四个层次:
服务器(server),数据库(database),数据表(table)和连接(connection)。
1.MySQL默认字符集
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。
但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?
(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;
(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用
latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。
2.查看默认字符集
(默认情况下,mysql的字符集是latin1(ISO_8859_1) 通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character%';
mysql> SHOW VARIABLES LIKE 'collation_%';
3.修改默认字符集
(1) 最简单的修改方法,就是修改mysql的配置文件中的字符集键值(下面方法适用于Ubuntu)
关于配置文件的查找方式见第4章节。
在mysqld上面添加
[client]
default-character-set=utf8
在[mysqld]最下面加入下面设置项
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
修改完后,重启mysql的服务,service mysql restart
使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
(2) 还有一种修改字符集的方法,就是使用mysql的命令
mysql> SET character_set_client = utf8 ;
这种方式不具备持久性,重启服务又会切换到默认字符集。
4. 确认mysql使用的配置文件
当我们需要修改配置文件时,需要找到mysql启动时是加载了哪个my.cnf文件。
(1)查看是否使用了指定目录的my.cnf
启动mysql后,我们查看mysql的进程,看看是否有设置使用指定目录的my.cnf文件,如果有则表示mysql启动时是加载了这个配置文件。
ps aux|grep mysql|grep 'my.cnf'
如果没有输出,表示没有设置使用指定目录的my.cnf。
查看mysql启动时读取配置文件的默认目录
mysql --help|grep 'my.cnf'
这些就是mysql默认会搜寻my.cnf的目录,顺序排前的优先。
从上面这些信息判断,MySQL的参数文件为/etc/mysql/my.cnf, 但是与其他几个my.cnf又是什么关联关系?
可以看出“/etc/mysql/my.cnf”是全局配置,“~/.my.cnf”隐藏文件是个人用户设置.
但是/etc/mysql/my.cnf参数文件下面没有任何参数设置,只看到下面两行设置,表示导入这两个目录里面的配置文件。
!includedir /etc/mysql/conf.d/
#表示包含/etc/mysql/conf.d/这个路径下面的配置文件,前提是必须以为.cnf为后缀
!includedir /etc/mysql/mysql.conf.d/
#表示包含/etc/mysql/mysql.conf.d/这个路径下面的配置文件,前提是必须以为.cnf为后缀
其实MySQL的相关配置都位于mysqld.cnf(/etc/mysql/mysql.conf.d/mysqld.cnf)下面。
把需要修改的配置内容写入,重启mysql后即可生效。
保持配置,重启服务生效。
service mysql restart
-------------------------------
测试环境: Ubuntu 5.15.0-58-generic Mysql 5.7.31