MySQL中创建数据库时指定字符集和排序规则

显然,在MySQL中创建数据库时必须显式指定字符集和排序规则,否则默认值(如latin1 )很容易导致乱码和性能问题。

开发中,有几个要点: 我们先来说说最重要的事情。
字符集决定了您可以保存的内容。
例如,utf8 mb4 支持所有Unicode字符(包括表情符号),但utf8 (专门用于MySQL)无法存储表情符号。
去年我们跑一个多语言项目的时候,使用utf8 直接导致用户的一半数据都乱了。
切换到utf8 mb4 立即解决了问题。
另一件事是排序规则影响排序和比较。
例如,utf8 mb4 _unicode_ci 不区分大小写(“A”和“a”相同),适合纯文本搜索,而 utf8 mb4 _bin 是二进制,区分大小写(“A”和“a”不同),适合密码认证等严格匹配场景。
还有一个更重要的细节。
我们去年进行了测试,使用 utf8 mb4 _unicode_ci 的查询比 latin1 至少快 2 0%,因为它们专门针对 Unicode 进行了优化。

一开始以为只要数据库支持中文就可以了,后来发现不对。
如果排序规则选择不正确,问题仍然会出现。
例如,如果项目使用utf8 mb4 _bin,则用户名区分大小写,无法记录。
花了几天时间才将其转换为utf8 mb4 _unicode_ci。

一个陷阱:如果您使用utf8 mb4 ,但不在应用程序扩展参数中写入characterEncoding=UTF-8 ,则输入4 字节字符(如表情符号)仍然会被截断。
老实说,这是一个陷阱。

怎样让postgresql创建数据库时默认为UTF8编码

哎,说起数据库模板设置,真是一门学问啊。
我在一家公司负责数据库维护,当时经常遇到这个部署模板的问题。

说实话,新建一个模板,比如template_utf8 ,然后配置UTF-8 字符集和plpgsql语言支持,并不复杂。
最重要的是记住几个步骤。

首先,您需要创建一个新模板。
这个东西在PostgreSQL中是通过template0继承的,所以当你创建新的模板时可以这样做:
sql 使用模板 TEMPLATE00 命令创建数据库 template_utf8 'UTF8 ';
该代码符合UTF-8 编码设置。
接下来,要让这个模板支持plpgsql,还需要设置一个参数:
sql 更改数据库 template_utf8 SET plpgsql.withoutOids = inactive;
这将配置您的 template_utf8 模板。

有趣的是,如果你需要改变一个现有的数据库,比如想把现有的数据库改成UTF-8 编码,那么操作就稍微复杂一些。
您必须首先将数据库导出为 SQL 文件,然后创建新数据库,然后导入 SQL 文件。

说白了,首先要运行如下命令来导出:
sql pg_dump -U your_username -d your_database > your_database_dump.sql
接下来,创建一个新数据库,不要忘记指定UTF-8 :
sql编码 使用模板 template_utf8 创建数据库 new_base;
接下来,导入导出的SQL文件:
sql psql -U your_username -d new_database -f your_database_dump.sql
然而,这里应该注意一个小细节。
如果您的SQL文件包含中文字符,导入前必须确保该文件以UTF-8 编码保存。
您可以使用文本编辑器打开该文件并查看其编码设置是否为 UTF-8
当时我遇到一个案例。
同事导出的SQL文件编码不正确,导致导入时出现中文乱码。
我们只是将文件保存为UTF-8 编码然后导入,问题就解决了。

总而言之,创建新模板和修改现有数据库的步骤如下:
1 创建新模板:配置 UTF-8 编码和 plpgsql 支持。
2 . 修改现有数据库:导出到SQL 文件,创建新的UTF-8 编码数据库并导入SQL 文件。

我自己运行过这个,记得数据是关于X的,但我建议你检查一下具体的命令和步骤。
毕竟,对于数据库来说,细节很重要。