搜索
您的当前位置:首页正文

关于MySql的字符集问题

来源:二三娱乐

1、场景

由于以前没有注意数据库字符集的问题,现在的UTF8字符集存在局限性,比如无法存储特殊字符等问题,所以统一改为utf8mb4。

1.1、概念

utf8mb4是utf8的超集并完全兼容utf8,能够用四个字节存储更多的字符。

utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,
utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,一般情况下这个值并不重要,不过建议选择unicode排序。

1.2、字符集规则

粒度越细,则权限越高。
比如:当数据库、表、列、连接级别未指定字符集时,采用server级的字符集。如果指定了database级的字符集,和server级字符集冲突,则按database字符集执行,

1.2.1、server服务器级别

mysql的配置文件配置整个数据库的字符集。

1.2.2、database数据库级别

在创建数据库时指定字符集。
如:创建一个名字叫做mydb的数据库,设置字符集utf8mb4排序规则utf8mb4_unicode_ci。
create database mydb character set utf8mb4 collate utf8mb4_unicode_ci;

1.2.3、table表级别

设置表的字符集。

create table mytable(
 id int,
 name varchar(50) CHARACTER SET utf8 COLLATE utf8_bin,
) default charset=utf8mb4 default collate=utf8mb4_unicode_ci;

1.2.4、column列级别

2、实践

1、当确定字符集后,最好具体到database级,因为多表查询时,索引和外键的关联,必须主键和外键统一字符集。
2、一旦字符集混乱之后,最后重新建数据库,重新建表,然后把数据导入新库,否则局部修补,会出各种问题。

Top