type
status
date
slug
summary
tags
category
icon
password
AI summary
Unicode 与 UTF-8
Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式(其他实现方式还有 UTF-16, UTF-32)。
MySQL 字符集 collation
collation定义了哪个字符和哪个字符是“等价”的。所以如果指定“不区分大小写”,那么a和A,e和E就是等价的,这样查找时就会方便很多。但这还不够,世界上的文字很多,所以才会有“不区分音调”的要求,这时候e、ē、é、ě、è就是等价的,那么假设我们要进行拼音查找,只要按e去找就可以全部列出来,很方便。甚至,它们也和ê、ë也是等价的,这样就更方便了。
collation也定义了字符的排序规则,如果按照“字符顺序(而不是简单的‘字母顺序’)”来排序,哪个字符应当排在哪个字符前面。所以,尽管“啊”、“副”、“德”三个字的拼音开头分别为A、F、D,但直接选定collation为utf8mb4,它们并不会按照“啊”、“德”、“副”的顺序排序,而是会排成“副”、“啊”、“德”。如果你希望把中文字符按照拼音(英文字母)来排序,指定使用gb18030_chinese_ci作为collation就可以了。
团队初期不注意 mysql 字符集和字符集 collation 问题,导致部分业务场景出现不可预料的问题,可以用以下脚本,自动生成修改语句,然后进行更新。
SQL 脚本
- 修改 schema 的默认字符集
2. 转换表的字符集