在PHPMyAdmin中创建数据库时设置字符集和排序规则的方法

显然,设置字符集和排序规则是确保 PHPMyAdmin 数据库支持 Unicode 字符(尤其是 emoji)以及优化检索和排序性能的关键。
其实很简单。
字符集决定数据的编码方式,排序规则影响数据检索和排序结果。

我们先来说说最重要的事情。
在字符集选择上,utf8 mb4 是兼容性的最佳选择。
可以支持表情符号和特殊符号,避免存储异常中文或表情符号。
去年我们跑的一个项目中,由于选择了兼容性差的字符集,导致大量表情符号无法正确显示。
另外,在排序规则方面,一般场景推荐使用utf8 mb4 _unicode_ci。
它基于Unicode标准,支持高精度的多语言混合排序。

一开始以为utf8 就够了,后来发现utf8 mb4 兼容性更好。
等等,还有别的事。
不同的排序规则对查询效率有影响。
例如,utf8 mb4 _unicode_ci虽然准确,但排序速度可能不如utf8 mb4 _general_ci快。

其实比较让人困惑的是,utf8 mb4 的每个字符最多占用4 个字节,比utf8 多了3 3 %,所以要特别注意存储空间,尤其是当数据多为中文或者表情符号的时候。
在查询性能优化方面,如果数据量很大,可以考虑使用更简单的排序规则来提高效率。

很多人不注意这一点。
如果是从旧数据库迁移到utf8 mb4 ,必须确保应用程序代码和扩展配置支持该字符集,否则会出现乱码。

最后,我认为在创建数据库时直接通过接口操作或SQL语句来设置字符集和排序规则是值得尝试的。
这样既能保证功能的完整性,又能在长期维护中省心。
例如,您可以使用如下 SQL 语句创建数据库:CREATEDATABASEmydatabaseCHARACTERSETutf8 mb4 COLLATEutf8 mb4 _unicode_ci;。
请记住根据实际情况调整配置以达到最佳效果。

mysql如何选择字符集及排序规则?

哎呀,顺便说一句,MySQL 8 .0 字符集的改变真是恰逢其时。
之前在5 .7 版本中,默认字符集是Latin 1 ,而这个东西只识别ASCII字符。
如果你想保存表情符号或者特殊字符,那就很头疼了。
后来在8 .0版本中,直接将默认字符集改为utf8 mb4 ,这确实是一个很大的改进。

这个utf8 mb4 是4 字节的UTF-8 编码,支持所有Unicode字符,包括表情符号、特殊字符和各种复杂文本。
想想看,现在一切都在线了,而且国际化的应用程序非常多。
这个utf8 mb4 可以满足这些需求,自然会有更多的人使用它。

我们来谈谈比较规则。
在8 .0版本中,utf8 mb4 的默认规则是utf8 mb4 _09 00_ai_ci,这比5 .7 版本中的utf8 mb4 _general_ci要好得多。
在 5 .7 版本中,只有 2 6 种比较规则,但在 8 .0 版本中,数量增加了一倍,达到 8 9 种。
在这 8 9 种类型中,编号为 09 00 的规则基于 UnicodeCollat​​ionAlgorithm (UCA) 9 .0.0 标准,该标准比之前的 9 .0.0 标准更新,因此支持更准确和现代的 Unicode。

在此规则中,ci 表示不区分大小写,cs 表示区分大小写,ai 表示不区分变音符号,as 表示区分变音符号。
规则 utf8 mb4 _09 00_ai_ci 版本 8 .0 不尊重大小写或变音符号。
它还符合更新的 Unicode 标准,使其更易于在国际和多语言环境中使用。

不过,说实话,这个东西和utf8 mb4 _general_ci 5 .7 版本的主要区别在于它不忽略尾随空格。
总体而言,8 .0 版本中对字符集和比较规则的更改旨在提供更准确和现代的 Unicode 支持,以及更好的国际化和对多语言环境的支持。

我建议如果你直接使用8 .0版本保留默认设置是没有问题的。
但如果您是从 5 .7 迁移或升级,最好保留原来的 utf8 mb4 _general_ci 字符集以避免出现问题兼容性。
我当时不太明白,后来查资料才知道。

navicat新建数据库排序规则选哪个

粗略地说,数据库字符集的选择取决于你是否需要多种语言和精确的校对规则。
这是一个复杂的问题,需要权衡性能和兼容性。

我们先来说说最重要的事情。
如果你想创建一个多语言应用程序(比如我们去年推出的跨境电商项目需要支持中文、英语和德语),你应该使用utf8 mb4 _unicode_ci。
它是根据 Unicode 标准排序的。
字母顺序和特殊字符不乱。
它还可以存储表情符号。
虽然请求慢,但是绝对稳定。
还有一点:如果你的数据都是中文或者英文,并且没有很高的排序要求(比如内部管理系统),utf8 mb4 _general_ci会更快,更节省资源,但是对某些字符进行排序可能不人性化。
还有一个更重要的细节。
utf8 _unicode_ci 适合较旧的系统或不关心表情符号的系统。
它比utf8 mb4 _unicode_ci占用的空间少,但字符集不完整。
如果插入表情符号,它可能会崩溃。

一开始我以为utf8 _general_ci最容易使用,后来发现它只适合纯英文不关心大小写规则的极端场景。
如果加上其他语言或者特殊字符的话,就会爆炸。

简单来说,多语言+标准排序规则类似于utf8 mb4 _unicode_ci。
毫无疑问,很多人都掉进了这个陷阱。