数据库建立的字符编码规则注意

281 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第25天,点击查看活动详情

无论是用代码创建数据库还是使用可视化工具创建数据库时,有一个可选项无法避免,那就是字符集的编码排序规则的设置。如果你有这方面的困惑请往下看。

数据库建立

字符集:

一般选择 UTF-8

一般有两个推荐项,供我们选择:utf8utf8mb4

这个两个的关系和解释

  1. utf8mb4兼容utf8,且比utf8能表示更多的字符。

  2. utf8mb4:utf8mb4字符集主要从mysql5.5开始被支持,正在成为未来趋势字符集。

  3. utf8:中英文混合的环境,目前使用的比较多,互联网场景的Linux/UNIX及MySQL都支持UTF8。

正常使用utf8即可(因为现在用的多,utf8更精简),选择utf8mb4也可以。

Ps:如果不设置该内容,默认是latin1,在中文插入操作中会出现问题,故不推荐使用默认字符集

排序规则:

一般选择 utf8_general_ci

这里会涉及到一个数据库数据选择,需要根据具体情况去选择编码。字符集的编码一般会通过数据库的方式进行统一,而排序规则会根据表或者根据字段去重新指定

通常我们会用到utf_binutf_general_ci;而这两个的解释和区别:

  1. utf_bin排序规则,该字段的大小写会被区别对待,例如:a 和 A 会别区别对待。
  2. utf_general_ci排序规则,则不会区分大小写,一般区分大小写的密码不太适合用这个。

例如SELECT * FROM table WHERE txt = 'a'

因为utf8_bin是区分大小写的,所以在utf8_bin中执行SELECT找不到 txt = 'A' 的那一行, 而 utf8_general_ci则可以。

排序规则列举

  1. utf8_bin:字符串每个字符串用二进制数据编译存储。区分大小写,而且可以存二进制的内容
  2. utf8_general_ci校对速度快,但准确度稍差。(准确度够用,一般建库选择这个)
  3. utf8_unicode_ci准确度高,但校对速度慢

Sql语句创建数据库

这里给出Sql语句创建数据库,并且同时指定两个规则,可以直接复制使用。

以下语句创建了一个demo数据库,并指定了utf8编码和utf8_general_ci排序规则。

CREATE DATABASE demo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;