0%

MySQL 中 VARCHAR 字段存储 Emoji 和设置区分大小写

1. MySQL 中存储 Emoji

MySQL 使用 utf8 字符集存储字符串时,如果字符串中包含 Emoji 表情,就会提示如下错误:

1
1366 - Incorrect string value: '\xF0\x9F\x98\x80' for column 'content' at row 1

UTF-8 编码长度为 1 ~ 4 字节,其中 Emojo 表情是4字节,而MySQL的utf8字符集最多支持3个字节,所以会报错。

mysql/Java服务端对emoji的支持 - 吴文东的博客

2. MySQL 设置区分大小写

MySQL 中 VARCHAR 类型的字符集一般设置成 utf8utf8mb4,然而 MySQL 默认是对大小写不敏感(不区分大小写),如果想要 MySQL 区分大小写需要设置排序规则,规则详解如下:

在 MySQL 中存在着各种排序规则:

  • utf8_bin 将字符串中的每一个字符用二进制数据存储,区分大小写。
  • utf8_genera_ci 不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
  • utf8_general_cs 区分大小写,cs为case sensitive的缩写,即大小写敏感。

utf8_genera_ci 没有区分大小写,导致这个字段的内容区分大小写时出问题,比如作为区分大小写的code或者验证码时就出问题了。
utf8_general_cs这个选项一般没有,所以只能用utf8_bin区分大小写。

1
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

mysql字段varchar设置区分大小写(敏感) - menghuanzhiming的博客