MySQL字符集与字符序实战
一、字符序命名规则
字符序是以对应的字符集名称开头、以_ci(不区分大小写)、_cs(区分大小写)、_bin(按编码值比较,区分大小写)等结尾。字符序的作用就是每种不同的字符集在比较时采用的不同的方法,例如:当会话的collation_connction设置为utf8_general_ci字符序时,字符a和字符A是等价的,而当其设置为utf8_bin时,字符a和字符A是不等价的。
二、字符编码相关参数
1、查看数据库字符集
show variables like '%character%';
系统显示类似如下。
- 以上参数必须保证除了character_set_filesystem以外的值相同,才不会出现乱码的情况。
- character_set_client、character_set_connection以及character_set_results是客户端的设置。
- character_set_system、character_set_server以及character_set_database是服务器端的设置。
- 服务器端的参数优先级是character_set_database > character_set_server > character_set_system。
- character_set_system参数由于其优先级最低,因此影响不大。修改了客户端字符集、character_set_database、character_set_server之后基本上可以保证不会出现乱码,在代码中设置客户端字符编码时建议通过set names [$Character_Set]来修改客户端的设置。[$Character_Set]为需要设置的字符集。
2、字符集相关SQL语句
show global variables like '%char%'; #查看RDS实例字符集相关参数设置
show global variables like 'coll%'; #查看当前会话字符序相关参数设置
show character set; #查看实例支持的字符集
show collation; #查看实例支持的字符序
show create table [$Table_Name]; #查看表字符集设置
show create database [$Database_Name]; #查看数据库字符集设置
show procedure status; #显示数据库中所有存储过程的基本信息
show create procedure [$Procedure_Name]; #显示某一个存储过程的详细信息
alter database db_name default charset utf8; #修改数据库的字符集
create database db_name character set utf8; #创建数据库时指定字符集
alter table tab_name default charset utf8 collate utf8_general_ci; #修改表字符集和字符序
说明:
- [$Table_Name]为需要表名。
- [$Database_Name]为库名。
- [$Procedure_Name]为存储过程的名称,一般会配合show procedure status;使用。
三、修改字符集
1、修改库的字符集
ALTER DATABASE [$Database] CHARACTER SET [$Character_Set] COLLATE [$Collation_Name];
说明:
[$Database]为数据库的库名。
[$Character_Set]为字符集名称。
[$Collation_Name]为排序规则名称,即字符序。
例如:dbsdq库修改为utf8mb4字符集:
alter database dbsdq character set utf8mb4 collate utf8mb4_unicode_ci;
2、修改表的字符集
ALTER TABLE [$Table] CONVERT TO CHARACTER SET [$Character_Set] COLLATE [$Collation_Name];
说明:[$Table]为表名。
例如,dtt2表修改为utf8mb4字符集:
alter table tt2 convert to character set utf8mb4 collate utf8mb4_unicode_ci;
3、修改列字符集
ALTER TABLE [$Table] MODIFY [$Column_Name] [$Field_Type] CHARACTER SET [$Character_Set] COLLATE [$Collation_Name];
说明:
[$Column_Name]为字段名。
[$Field_Type]为字段类型。
例如,tt2表中的c2列修改为utf8mb4字符集
alter table tt2 modify c2 varchar(10) character set utf8mb4 collate utf8mb4_unicode_ci;
喜欢请赞赏一下啦^_^
微信赞赏
支付宝赞赏