一、什么是字符集
是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同。
特点:
①字符编码方式是用一个或多个字节表示字符集中的一个字符;
②每种字符集都有自己特有的编码方式,因此同一个字符,在不同字符集的编码方式下,会产生不同的二进制。
即数据库的编码方式。
二、字符集的作用是什么
限定mysql的编码,处理乱码情况
MySQL要求对8种场景设置字符集,如图所示
character_set_client:代表客户端字符集,客户端最简单的来说,就是上图中的命令行,或者其它操作数据库的网页、应用等等,客户端字符集代表了用户的输入的字符的编码。
character_set_connection:代表与是数据库连接层的字符集。
character_set_databases:数据库采用的字符集。
character_set_filesystem:文件采用的字符集,一定是二进制最适合。
character_set_result:结果字符集,返回结果时采用的字符集。
character_set_server:mysql服务器采用的字符集,也就是操作默认的字符集。
character_set_system:系统字符集,比如我们输入的命令“insert…"这些语句字符串采用的字符集
character_sets_dir:可以使用的字符集的文件路径
字符集的转换流程:
- 客户端请求数据库数据,发送的数据使用character_set_client字符集
- MySQL实例收到客户端发送的数据后,将其转换为character_set_connection字符集
- 进行内部操作时,将数据字符集转换为内部操作字符集:
使用每个数据字段的character set设定值
若不存在,使用对应数据表的default character set设定值
若不存在,使用对应数据库的default character set设定值
若不存在,使用character_set_server设定值 - 将操作结果值从内部操作字符集转换为character_set_results
注意
在创建时未设置字符集的情况下,当前创建的内容会根据上一级的字符集来确定字符集,比如创建数据库未指定字符集,则会采用server的字符集来作为库的字符集,创建数据库时未指定字符集,则会采用数据库的字符集来做为表的字符集。以此类推,从下到上为:记录<表<库<服务器。
三、如何设置字符集
将字符集统一为utf8可以有效解决乱码请况
1. 查看MySQL的字符集
2. 修改my.ini文件,添加以下语句
[client]代表客户端默认设置内容
[mysql]代表我们使用mysql命令登录mysql数据库时的默认设置
[mysqld]代表数据库自身的默认设置
[mysql]
#在该区域设置默认字符集(default-character-set=utf8),
#那么这三个**character_set_client,character_set_connection,character_set_results**,全部生效
default-character-set=utf8
[mysqld]
#在该区域设置默认字符集(default-character-set=utf8),
#那么**character_set_server,character_set_database**两个全部生效,并且这俩个参数只有在该节中可以设置,其他地方设置会报错
default-character-set=utf8
[client]
#在该区域设置默认字符集(default-character-set=utf8),
#那么这个三个**character_set_client,character_set_connection,character_set_results**,全部生效
#如果**在[mysql]和[client]节中都设置了默认字符集,那么以[client]为准**
default-character-set=utf8
推荐设置:
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8