mariadb 需要对SET NAMES指令与character_set变量进行说明

mxg2im7a  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(100)

最近,我需要在我的数据库中的一些表中存储emoji(MySQL / MariaDB),所以经过一番研究,我发现我使用的编码(UTF8)是不够的,我需要转到UTF8-mb 4。然后我将所需表的字符集更改为新的编码,但显然这还不够。我还修改了我创建新的DbConnection时使用的连接字符串,指定编码utf8 mb 4,但我仍然无法保存emojy。最后我找到了这个答案Using utf8mb4 in MySQL,建议使用SET NAMES指令,这解决了我的问题,但我注意到该指令一直处于活动状态,直到我重新启动db服务,我想知道:
1.使用SET NAMES指令的确切效果是什么,尤其是对于使用旧utf8编码的表?
1.哪种方式是正确的使用方法?(在my.ini中还是在我的代码中?)
1.关于这份说明书,我有什么需要担心的吗?
1.是否有其他方法将character_set_client和character_set_connection设置为utf8 mb 4?

mqxuamgl

mqxuamgl1#

  1. SET NAMES命令的效果在the MySQL manual中指定:它会将以下三个系统变量设置为指定值:
  • 字符集客户端
  • 字符集连接
  • 字符集结果

它不能对使用旧的utf8排序的表产生任何影响,因为emoji不能以该编码存储;对于新表,它可能会影响服务器如何解释客户端发送的字符串文字(character_set_connection),以及如何将从表中检索到的表情符号发送回客户端(character_set_results)。
1.您不需要在代码中显式地使用它。正确的客户端库会为您设置这个值,既可以通过客户端发送的握手响应包,也可以根据需要在服务器切换到不同的字符集进行连接时设置。MySqlConnector在这方面有正确的行为,我建议切换到它。(免责声明:主要作者)
1.不,让您的客户端库为您处理它。
1.是的,在握手响应包中,但这是你正在使用的客户端库的实现细节。你也可以用SET @@character_set_connection = 'utf8mb4';这样的语句来设置它们。

相关问题