MYSQL中有关的字符编码问题

通常我们建表时候会有如下语句:

CREATE TABLE `table` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `field1` text COLLATE utf8_unicode_ci NOT NULL COMMENT '字段1',
    `field2` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '字段2',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8_unicode_ci;

即会出现 CHARSET 与COLLATE ,那么他们分别代表的是什么呢? 先给出结论:

  • CHARSET 字符集设置
  • COLLATE 字符字段排序规则

COLLATE 字符字段排序规则,会影响 DISTINCT、GROUP BY、HAVING语句的查询结果

一般情况CHARSET 都有一个默认的 COLLATE. 即,字符集都有一个默认的规则,如:

CHARSET默认COLLATE
Latin1latin1_swedish_ci
GBKgbk_chinese_ci
utf8mb4utf8mb4_general_ci

下面介绍一下 COLLATE 值的规则:

  • _ci 后缀 是 Case Insensitive 的缩写,即: 大小写不敏感的,体现为大写和小写会在排序筛选中相同
  • _cs 后缀 是 Case Sensitive 的缩写,即: 大小写敏感的,体现为大写和小写在排序筛选中会不相同

参考文献:
https://cloud.tencent.com/developer/article/1366841

发表新评论