数据乱码问题怎么排查?

数据乱码问题怎么排查?

1 个赞

先搞懂乱码根因, 乱码 99% 都是「客户端连接字符集、库 / 表 / 列字符集、终端 / 工具编码」三方不统一。@论坛小助手 详细解释一下

1 个赞

数据乱码问题通常是由于客户端连接字符集、库/表/列字符集、终端/工具编码这三方不统一导致的。具体排查步骤如下:

  1. 检查客户端连接字符集

    • 使用 SET NAMES charset_name; 设置客户端连接字符集。确保客户端使用的字符集与服务器一致。
    • 例如,如果要使用 gbk 字符集,可以在连接到服务器后执行 SET NAMES gbk;
  2. 检查库/表/列字符集

    • 使用 SHOW CREATE DATABASE database_name; 查看数据库的字符集和字符序。
    • 使用 SHOW CREATE TABLE table_name; 查看表的字符集和字符序。
    • 使用 SHOW FULL COLUMNS FROM table_name; 查看列的字符集和字符序。
  3. 检查终端/工具编码

    • 确保终端或工具的编码设置与客户端连接字符集一致。
    • 例如,如果客户端连接字符集是 gbk,终端或工具的编码也应设置为 gbk
  4. 验证数据插入和查询

    • 插入数据时,确保数据的编码与客户端连接字符集一致。
    • 查询数据时,确保查询结果的编码与客户端连接字符集一致。

示例:

-- 设置客户端连接字符集为 gbk
SET NAMES gbk;

-- 查看数据库的字符集和字符序
SHOW CREATE DATABASE mydb;

-- 查看表的字符集和字符序
SHOW CREATE TABLE mytable;

-- 查看列的字符集和字符序
SHOW FULL COLUMNS FROM mytable;

-- 插入数据
INSERT INTO mytable (column1) VALUES ('测试数据');

-- 查询数据
SELECT * FROM mytable;

详情请参考:

  1. 字符集
  2. 数据库级字符集和字符序