『MySQL』全球化和本地化
字符集和校对顺序
不同的语言和字符集需要以不同的方式存储和检索。
MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。
字符集为字母和符号的集合。
编码为某个字符集成员的内部表示。
校对为规定字符如何比较的指令。
校对为什么重要?
使用区分大小写的校对顺序,有一种排序方式;使用不区分大小写的校对顺序有另一种排序方式。
这不仅影响排序(如用
ORDER BY
排序数据),还影响搜索(例如,寻找apple的WHERE
子句是否能找到APPLE)。在使用法文或德文的字符时,情况更复杂,在使用不基于拉丁文的字符集(日文、希伯来文、俄文等)时,情况更为复杂。在MySQL的正常数据活动(
SELECT
、INSERT
等)中,不需要操心太多的东西。使用何种字符集和校对的决定在服务器、数据库和表级进行。
使用字符集和校对顺序
- MySQL支持众多的字符集。
1 | -- 查看所支持的字符集完整列表 |
- 通常系统管理在安装时定义一个默认的字符集和校对。也可以在创建数据库时,指定默认的字符集和校对。
1 | -- 确定所用的字符集和校对 |
实际上,字符集很少是服务器范围(甚至是数据库范围)的设置。
不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定。
1 | -- 给表指定字符集和校对 |
- 一般,MySQL如下确定使用什么样的字符集和校对:
- 如果指定
CHARACTER SET
和COLLATE
两者,则使用这些值。 - 如果只指定
CHARACTER SET
,则使用此字符集及其默认的校对(如SHOW CHARACTER SET
的结果中所示)。 - 如果既不指定
CHARACTER SET
,也不指定COLLATE
,则使用数据库默认。
- 如果指定
1 | -- 对整个表以及一个特定的列指定CHARACTER SET和COLLATE |
- 临时区分大小写:上面的SELECT语句演示了在通常不区分大小写的表上进行区分大小写搜索的一种技术。反过来也可以。
- SELECT的其他COLLATE子句:除了这里在
ORDER BY
子句中使用以外,COLLATE
还可以用于GROUP BY
、HAVING
、聚集函数、别名等。 - 如果绝对需要,串可以在字符集之间进行转换。为此,使用
Cast()
或Convert()
函数。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 KissSheep's Blog!
评论