最近,我需要在我的数据库中的一些表中存储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?
1条答案
按热度按时间mqxuamgl1#
SET NAMES
命令的效果在the MySQL manual中指定:它会将以下三个系统变量设置为指定值:它不能对使用旧的
utf8
排序的表产生任何影响,因为emoji不能以该编码存储;对于新表,它可能会影响服务器如何解释客户端发送的字符串文字(character_set_connection
),以及如何将从表中检索到的表情符号发送回客户端(character_set_results
)。1.您不需要在代码中显式地使用它。正确的客户端库会为您设置这个值,既可以通过客户端发送的握手响应包,也可以根据需要在服务器切换到不同的字符集进行连接时设置。MySqlConnector在这方面有正确的行为,我建议切换到它。(免责声明:主要作者)
1.不,让您的客户端库为您处理它。
1.是的,在握手响应包中,但这是你正在使用的客户端库的实现细节。你也可以用
SET @@character_set_connection = 'utf8mb4';
这样的语句来设置它们。