首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要澄清设置名称、指令和character_set变量

需要澄清设置名称、指令和character_set变量
EN

Stack Overflow用户
提问于 2022-06-20 07:17:59
回答 1查看 31关注 0票数 0

最近,我需要在DB中的一些表(MySQL / MariaDB)中存储表情符号,因此经过一些研究后,我发现我所使用的编码(UTF8)还不够,我需要迁移到UTF8-mb4。然后,我将所需表的字符集更改为新的编码,但显然这还不够。我还更改了在创建新DbConnection时使用的连接字符串,指定了编码utf8mb4,但仍然无法保存emojy。最后,我找到了这个答案utf8mb4在MySQL中的应用,它建议使用SET NAMES指令。这解决了我的问题,但我注意到,在重新启动db服务之前,指令是活动的。我想知道:

  1. 使用SET NAMES指令的确切效果是什么,特别是对于使用旧utf8编码的表?
  2. 使用它的正确方法是什么?(在my.ini或我的代码中?)
  3. 有什么需要我担心的吗?
  4. 还有其他方法可以将character_set_client和character_set_connection设置为utf8mb4吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-20 12:28:14

  1. SET NAMES命令的效果在MySQL手册中指定:它将这三个系统变量设置为指定的值:

它不会对使用旧utf8排序规则的表产生任何影响,因为不能将表情符号存储在这种编码中;数据丢失了。对于新表,它可能会影响服务器如何解释客户端发送的字符串文本(character_set_connection),以及如何将从表中检索的表情符号发送回客户端(character_set_results)。

  1. 您不应该需要在代码中显式使用它。正确的客户端库将通过客户端发送的握手响应数据包为您设置此值,如果服务器切换到连接的不同字符集,则将根据需要设置此值。MySqlConnector在这方面有正确的行为,我建议改用它。(免责声明:主要作者)
  2. 不,让你的客户库帮你处理。
  3. 是的,在握手响应包中,但是这是您正在使用的客户端库的实现细节。您还可以使用像SET @@character_set_connection = 'utf8mb4';这样的语句来设置它们。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72683486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档