字符集(Character Set)是字符的编码规则,字符序(Collation)是字符的排序规则。
字符序定义了如何在数据库中比较字符串数据(例如,文本和字符)。字符序影响字符串数据的排序顺序以及字符串搜索和比较操作的行为。
字符集(Character Set)是一组字符的集合,其中每个字符都有一个唯一的编码。字符集定义了如何在数据库中表示和存储字符数据。例如,常见的字符集有 ASCII、UTF-8、GBK 等。
字符集和字符序的实际使用举例:
创建数据库时指定字符序
当你创建一个新的数据库时,可以通过指定字符集和字符序来控制数据库中数据的存储和排序方式:
CREATE DATABASE my_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
在这个例子中,utf8mb4是字符集,支持存储包括emoji在内的四字节Unicode字符,而utf8mb4_unicode_ci是字符序,它提供了基于Unicode的校对规则,不区分大小写。
修改表的字符序
你也可以在创建或修改表时设置字符序,以控制特定表中的数据比较和排序行为:
ALTER TABLE my_table
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_bin;
这里,utf8mb4_bin字符序与utf8mb4_unicode_ci不同,它是区分大小写的,而且以二进制方式比较字符,适合那些需要精确区分大小写或特殊字符的场景。
在查询中使用字符序
在SQL查询中,你可以利用ORDER BY子句结合特定的字符序来进行定制化的排序:
SELECT name
FROM users
ORDER BY name COLLATE utf8mb4_unicode_ci;
这个查询会按照utf8mb4_unicode_ci字符序对用户名进行排序,忽略大小写差异。
设置会话级别的字符序
在MySQL中,你可以临时改变会话的字符序设置,影响特定客户端的查询行为:
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
这条命令设置了客户端的字符集为utf8mb4,字符序为utf8mb4_general_ci,这意味着在此会话中执行的所有查询都将遵循这套字符比较规则。
总结
字符序在数据库操作中起着基础而重要的作用,它影响着数据的存储、检索、排序和比较方式。通过在不同层级(如数据库、表、列或查询)上精确设置字符序,可以确保数据处理逻辑符合应用需求,尤其是在多语言环境中,字符序的选择更是关键,它直接关系到应用的国际化和本地化能力。
相关参考:https://www.modb.pro/db/622745
https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0347.html