MySQL由瑞典MySQL AB公司开发,默认情况下MySQL使用的是latin1字符集。由此可能导致MySQL数据库不支持中文字符串查询或者发生中文字符串乱码等问题。
2.2.1 字符集及字符序概念
1.字符
字符(Character)是人类语言最小的表义符号,例如‘A’‘B’等。给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这个数值就是字符的编码(Character Encoding)。
2.字符集
给定一系列字符并赋予对应的编码后,所有这些“字符和编码对”组成的集合就是字符集(Character Set)。
字符集及字符ASCII码对照表,如图2.18所示。

图2.18 字符集及字符ASCII码对照表
3.字符序
字符序(Collation)是指在同一字符集内字符之间的比较规则。一个字符集包含多种字符序,每个字符序唯一对应一种字符集。
MySQL字符序命名规则是:以字符序对应的字符集名称开头,以国家名居中(或以general居中),以ci、cs或bin结尾。
ci表示大小写不敏感,cs表示大小写敏感,bin表示按二进制编码值比较。
2.2.2 MySQL字符集及字符序
使用MySQL命令:
show character set;即可查看当前MySQL服务实例支持的字符集、字符集默认的字符序以及字符集占用的最大字节长度等信息。其中字符集latin1支持西欧字符、希腊字符等;gbk支持中文简体字符;big5支持中文繁体字符;utf8几乎支持世界所有国家的字符。
查看当前MySQL服务实例使用的字符集,使用MySQL命令:
show variables like 'character%';即可查看当前MySQL服务实例使用的字符集,如图2.19所示。

图2.19 MySQL服务实例使用的字符集
其中:
character_set_client:MySQL客户机字符集。
character_set_connection:数据通信链路字符集。当MySQL客户机向服务器发送请求时,请求数据以该字符集进行编码。
character_set_database:数据库字符集。
character_set_filesystem:MySQL服务器文件系统字符集,该值是固定的binary。
character_set_results:结果集的字符集,MySQL服务器向MySQL客户机返回执行结果时,执行结果以该字符集进行编码。
character_set_server:MySQL服务实例字符集。
character_set_system:元数据(字段名、表名、数据库名等)的字符集,默认值为utf8。
使用MySQL命令“show collation;”即可查看当前MySQL服务实例支持的字符序,如图2.20所示。

图2.20 MySQL服务实例支持的字符序
2.2.3 MySQL字符集的转换过程
MySQL字符集的转换过程如图2.21所示。

图2.21 MySQL字符集的转换过程
2.2.4 MySQL字符集的设置
MySQL字符集的设置方法如下:
方法1:修改my.ini配置文件,可修改MySQL默认的字符集。
方法2:MySQL提供下列MySQL命令可以“临时地”修改MySQL“当前会话的”字符集以及字符序。
set character_set_client = gbk;
set character_set_connection = gbk;
set character_set_database = gbk;
set character_set_results = gbk;
set character_set_server = gbk;
set collation_connection = gbk_chinese_ci;
set collation_database = gbk_chinese_ci;
set collation_server = gbk_chinese_ci;
方法3:使用MySQL命令 “set names gbk;”可以“临时一次性地”设置character_set_client、character_set_connection以及character_set_results的字符集为gbk。
方法4:连接MySQL服务器时指定字符集。
命令:mysql --default-character-set=字符集 -h 服务器IP地址 -u 账户名 –p密码
在连接MySQL服务器的同时指定字符集的步骤:
(1)首先连接到MySQL:mysql -u root -p root
(2)输入\s,即可查看数据库的字符编码。
如果要查看数据库的详细编码,可用命令输入:show variables like '%char%';
下面举例说明。
① 首先连接好服务器后,新建一个数据库test1,用命令:
create database test1;
执行结果如图2.22所示。

图2.22 新建一个数据库(https://www.xing528.com)
② 执行成功后,在命令窗口中,输入如下命令,查看当前数据库的详细编码。
show create database test1;
执行结果如图2.23所示。

图2.23 查看数据库的详细编码
③ 用set命令设置当前窗口的数据库字符编码,这里将utf-8设置为gbk。
set character_set_database=gbk;
执行结果如图2.24所示。

图2.24 设置当前窗口的数据库字符编码为gbk
④ 再用set命令将character_set_server设置字符编码为gbk。
set character_set_server=gbk;
执行结果如图2.25所示。

图2.25 设置数据库字符编码为gbk
⑤ 查看数据库的详细编码。
show variables like '%char%';
执行结果如图2.26所示。

图2.26 查看数据库字符编码
此时发现database和server都变成了gbk,然后再重新创建一个数据库test2,再查看其编码。
create database test2;
执行结果如图2.27所示。

图2.27 重新创建一个数据库
show create database test2;
执行结果如图2.28所示。

图2.28 查看建库中信息
此时发现数据库编码已经变为gbk了。
但是将此窗口关闭后,重新打开一个新的窗口来连接数据库,重新查看数据库的编码,发现不是刚刚修改的gbk了,还是原来的utf-8。这是基于会话级别的改变编码的方式,当重新新建一个窗口连接时,会话已经改变,所以变为了原来的字符编码。
如果想要设置永久的字符编码,即需要在配置文件中修改数据库的字符编码。编辑/etc/my.cnf,在其中加入,已经有[XXX],在里面直接加入即可。
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
然后重启数据库即可,service mysql restart
mysqld --initialize 初始化
mysqld –defaults-file=”C:\Program Files\MySQL\MySQL Server 5.7\my-default.ini”
2.2.5 修改MySQL默认字符集的方法
MySQL默认字符集能否进行修改呢?答案是肯定的,下面就介绍两种修改MySQL默认字符集的方法,希望对大家学习MySQL默认字符集方面有所启迪。
(1)最简单的修改方法,就是修改MySQL的my.ini文件中的字符集键值:


(2)还有一种修改MySQL默认字符集的方法,就是使用mysql的命令:

一般就算将表的MySQL默认字符集设为utf8并且通过UTF-8编码发送查询,会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这条指令:
SET NAMES 'utf8';
它相当于下面的三条指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
2.2.6 SQL脚本文件
SQL基本的执行方法(两种):
(1)\.C:\mysql\init.sql
(2)source C:\mysql\init.sql
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
