MySQL踩坑点:字符集和排序规则
一、utf8 和utf8mb4
1、utf8 不支持生僻字和表情包等
2、utfmb4 支持生僻字和表情包等
在国内,使用最多就是这两个字符集。
二、mysql的默认排序规则
1、字符集utf8的默认排序规则:
- uft8_general_ci, 不区分大小写
- uft8_bin, 区分大小写
2、字符集utfmb4的默认排序规则:
- utf8mb4_general_ci ,不区分大小写
- uft8mb4_bin , 区分大小写
三、新建时自定义排序规则
3.1、新建库时指定
1、uft8字符集,utf8_bin排序规则
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin;
2、utf8mb4字符集,utf8mb4_bin排序规则
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin;
3.2、创建表时,指定字段
1、uft8字符集,utf8_bin排序规则
CREATE TABLE my_table (
id INT PRIMARY KEY AUTO_INCREMENT,
column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin
);
2、utf8mb4字符集,utf8mb4_bin排序规则
CREATE TABLE another_table (
id INT PRIMARY KEY AUTO_INCREMENT,
column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
);
四、修改现有库和表
4.1、修改库
注意:
-
已经存在的表,无法因为数据库被修改而修改。
-
修改的库,新建的表就是使用修改后的排序方式了
1、查看数据库的字符集和排序规则
SHOW CREATE DATABASE your_database_name;
2、修改数据库的字符集和排序规则
字符集修改成utf8,排序规则修改成utf8_bin:
ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_bin;
字符集修改成utf8mb4,排序规则修改成utf8mb4_bin:
ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
4.2、修改表
1、查看表的字符集和排序规则
SHOW CREATE TABLE your_table_name;
2、修改表的字符集和排序规则
utf8字符集和utf8_bin排序规则:
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
utf8mb4字符集和utf8mb4_bin 排序规则:
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
五、短链系统
1、自建一个短链系统时,使用mysql做存储,创建表时,没有去自定义排序方式。
2、使用的短链生成方式:使用自增id值,对base62取模求余,通过余数去循环获取字符,拼接成code。
3、用来存短链code的字段设置了unique唯一性限制,使用字符集uft8,使用默认排序方式是不区分大小写。
4、导致记录到表时出现唯一性报错了,5tc 与5tC 判定是一样的,无法录入数据库。