如何排查并修正SQL聚合查询中中文字符编码乱码问题?

2026-05-06 19:400阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计924个文字,预计阅读时间需要4分钟。

如何排查并修正SQL聚合查询中中文字符编码乱码问题?

在SQL查询中使用GROUP BY或GROUP_CONCAT时,如果遇到中文字符或Mojibake(如%A%C%9F%90%A%C%BA%BA)等问题,通常不是SQL语法错误,而是由于连接层的字符集设置不当导致的。如果表字段是utf8mb4,但连接层的字符集是latin1或utf8(取决于MySQL的版本),就会产生乱码。

要解决这个问题,需要确保以下两点:

查当前连接实际生效的字符集

别只看建库语句或 SHOW VARIABLES LIKE 'character_set_database',GROUP BY 和 GROUP_CONCAT 用的是 session 级连接参数。执行:

SHOW VARIABLES LIKE 'character_set%';

重点关注这三项是否全为 utf8mb4

  • character_set_client
  • character_set_connection
  • character_set_results

任一不是 utf8mb4,聚合结果就可能出问题。常见陷阱:Navicat 默认连接用 utf8(实为 utf8mb3),不支持 emoji 和部分生僻汉字;命令行 mysql -u root -p 不加参数时默认用 latin1

连接初始化时必须显式声明 utf8mb4

应用代码里漏掉 charset 声明,等于白配数据库。

阅读全文
标签:编码

本文共计924个文字,预计阅读时间需要4分钟。

如何排查并修正SQL聚合查询中中文字符编码乱码问题?

在SQL查询中使用GROUP BY或GROUP_CONCAT时,如果遇到中文字符或Mojibake(如%A%C%9F%90%A%C%BA%BA)等问题,通常不是SQL语法错误,而是由于连接层的字符集设置不当导致的。如果表字段是utf8mb4,但连接层的字符集是latin1或utf8(取决于MySQL的版本),就会产生乱码。

要解决这个问题,需要确保以下两点:

查当前连接实际生效的字符集

别只看建库语句或 SHOW VARIABLES LIKE 'character_set_database',GROUP BY 和 GROUP_CONCAT 用的是 session 级连接参数。执行:

SHOW VARIABLES LIKE 'character_set%';

重点关注这三项是否全为 utf8mb4

  • character_set_client
  • character_set_connection
  • character_set_results

任一不是 utf8mb4,聚合结果就可能出问题。常见陷阱:Navicat 默认连接用 utf8(实为 utf8mb3),不支持 emoji 和部分生僻汉字;命令行 mysql -u root -p 不加参数时默认用 latin1

连接初始化时必须显式声明 utf8mb4

应用代码里漏掉 charset 声明,等于白配数据库。

阅读全文
标签:编码