能否在INSERT语句中设置排序规则?引入符级排序规则查询异常求助
问题2:使用字符集引入符插入后查询显示异常
你遇到的乱码问题,核心原因是客户端连接字符集和表字段的字符集不匹配,导致了编码解析错误:
- 你创建的表字段是
CHARACTER SET euckr COLLATE euckr_bin,但你的客户端连接字符集大概率是utf8(或utf8mb4)。 - 当你用
_euckr'가'插入时,你明确告诉MySQL“这个字符串是euckr编码的”,但实际上你在utf8客户端里输入的'가'本身是utf8编码的字节。MySQL会把这些utf8字节当成euckr编码来解析,转成euckr存储时就已经是乱码了,查询时再转成utf8自然就显示成了“媛”。 - 而直接输入
'가'时,MySQL能识别客户端的utf8编码,自动把utf8的“가”转换成euckr存储,转换过程正确,所以查询时再转回来就显示正常。
解决方法:
- 方法一:统一客户端和字段的字符集
执行这条命令把客户端连接字符集改成euckr:
之后再用SET NAMES euckr;_euckr'가'插入和查询,就能正常显示了。 - 方法二:不用字符集引入符,让MySQL自动转换
就像你直接用INSERT INTO test.tblname VALUES ('가');的方式,MySQL会根据客户端连接字符集和表字段字符集自动做正确的编码转换,避免手动指定引入符带来的错误。 - 方法三:确保引入符和实际字符串编码一致
如果你一定要用_euckr前缀,那你输入的字符串必须真的是euckr编码的,而不是utf8编码的。不过这个在日常操作里很难做到,所以更推荐前两种方法。
内容的提问来源于stack exchange,提问作者Anurag Kumar
相关产品推荐
相关产品推荐

