淘先锋技术网

首页 1 2 3 4 5 6 7

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