MySQL 各种字符集配置的使用

Posted

技术标签:

【中文标题】MySQL 各种字符集配置的使用【英文标题】:Uses of various character set configs for MySQL 【发布时间】:2019-07-13 22:21:44 【问题描述】:

我跑了

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; 输出是

+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| character_set_client     | utf8              |
| character_set_connection | utf8              |
| character_set_database   | latin1            |
| character_set_filesystem | binary            |
| character_set_results    | utf8              |
| character_set_server     | latin1            |
| character_set_system     | utf8              |
| collation_connection     | utf8_general_ci   |
| collation_database       | latin1_swedish_ci |
| collation_server         | latin1_swedish_ci |
+--------------------------+-------------------+

谁能解释一下这些设置的具体用法?我的理解如下:

    character_set_client:告诉客户端用于查询编码的编码 character_set_connection:服务器用于将查询转换为的编码 character_set_database:用于在表中存储数据的编码 character_set_server:如果未指定 character_set_connection,则默认编码 character_set_results:结果以这种格式编码并返回。

为什么需要这么多配置?客户端和服务器配置不能一直保持不变吗?

我正在尝试执行插入查询,但由于字符串中存在 ' 而失败。是否建议对其进行转义或对查询进行编码?另外,如何在golang中对其进行编码?

【问题讨论】:

网上有很多教程..你可以去探索一下。 您看到的错误与字符集无关。您可能只是有一个格式错误的查询。 这不是错误。我没有找到关于这些配置差异的好的文档。 【参考方案1】:

是的,您必须对发送到 mysql 的任何字符串进行转义。特别是,至少必须对'"\ 进行转义。否则,您认为将名称O'Brian 插入表中时会发生这种情况吗?:

 INSERT INTO t (name) VALUES ('O'Brian');

引用和转义独立于character_set% 值。

一列可以有任何想要的CHARACTER SET。 一个表可以有任何想要的默认CHARACTER SET。 一个数据库可以有任何想要的默认CHARACTER SET。注意:如果您在CREATEing 列或表时显式,则此设置无用。 服务器可以有任何想要的默认 CHARACTER SET。注意:如果你明确CREATEingdatabases/tables/columns,这个设置是没有用的。

同时,客户端可以有任何不同的CHARACTER SET。但是告诉服务器客户端使用什么编码的方法是通过其中的 3 个设置(客户端/连接/结果)。可以通过

SET NAMES utf8mb4;

但是,在连接过程中通过一些参数来建立客户端的编码通常是“更好的”。 (这种语法因客户端而异——Java/php/VB/等)

为什么这么多?可能太多了。几乎所有实际案例都是通过更改这三个设置来处理的;同时,其他设置可以忽略。

还有一件事:存储例程具有字符集和排序规则,我认为这来自数据库设置。

【讨论】:

以上是关于MySQL 各种字符集配置的使用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL字符集选择

MySQL学习----各种字符的长度总结

mysql数据类型以及各种语句的总结

mysql my.ini配置文件修改无效,修改mysql默认字符集

Windows中mysql的配置文件,解决字符集编码问题,统一使用utf8字符集

MYSQl配置文件