解决数据库乱码 不显示中文

1. 字符集配置未正确设置

原因
  • 数据库/表/列的字符集非 UTF-8:若数据库、表或字段的字符集为 latin1 等非 UTF-8 编码,存储或查询中文时会乱码。

  • 客户端与服务器字符集不匹配:客户端工具(如 MySQL 命令行)的字符集与数据库不一致,导致数据显示异常。

解决步骤
  1. 检查数据库和表的字符集

    sql

    复制

    -- 查看数据库字符集
    SHOW CREATE DATABASE your_database;
    
    -- 查看表字符集
    SHOW CREATE TABLE tb_user;
    • 确认字符集为 utf8mb4(推荐)或 utf8,排序规则为 utf8mb4_unicode_ci

  2. 修改字符集(如需要)

    sql

    复制

    -- 修改数据库字符集
    ALTER DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    -- 修改表字符集
    ALTER TABLE tb_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 客户端字符集未正确配置

原因
  • 客户端工具(如 MySQL 命令行)未指定 UTF-8 编码,导致中文显示为乱码或问号(???)。

解决步骤
  1. 在连接时指定字符集

    bash

    复制

    mysql -u username -p --default-character-set=utf8mb4
  2. 在 MySQL 会话中动态设置

    sql

    复制

    SET NAMES 'utf8mb4';  -- 统一客户端、连接、结果的字符集
  3. 永久配置客户端字符集
    在 MySQL 配置文件(如 my.cnf)的 [client] 部分添加:

    ini

    复制

    [client]
    default-character-set = utf8mb4

3. 数据写入时已损坏

原因
  • 若数据在插入时未使用正确的字符集,即使后续修改字符集,已存储的中文仍可能为乱码。

解决步骤
  1. 重新插入数据
    确保在字符集统一后,使用正确的编码重新插入中文数据。

    sql

    复制

    INSERT INTO tb_user (name) VALUES ('中文测试');
  2. 转换已有数据编码
    若已有数据因字符集问题损坏,可导出后重新导入:

    bash

    复制

    mysqldump --default-character-set=latin1 -u root -p your_database > dump.sql
    # 修改 dump.sql 文件字符集声明为 utf8mb4
    mysql --default-character-set=utf8mb4 -u root -p your_database < dump.sql

4. 终端工具或操作系统不支持 UTF-8

原因
  • 终端工具(如 PuTTY、Xshell)或操作系统的字符编码未设置为 UTF-8,导致中文无法渲染。

解决步骤
  1. 设置终端编码为 UTF-8

    • Windows(PuTTY):在 Connection > Data 中设置 "UTF-8"。

    • Linux/macOS:在终端配置中确认编码为 UTF-8。

  2. 安装中文字体
    确保操作系统或终端工具安装了中文字体(如 Noto Sans CJK)。


验证中文显示是否正常

  1. 插入测试数据

    sql

    复制

    INSERT INTO tb_user (name) VALUES ('中文测试');
  2. 查询数据

    sql

    复制

    SELECT * FROM tb_user WHERE name = '中文测试';
    • 若正确显示中文,则问题已解决。


总结

  • 统一字符集:确保数据库、表、客户端、连接均使用 utf8mb4

  • 配置优先级

    • 数据库层 > 客户端层 > 操作系统/终端工具。

  • 数据完整性:若已有数据乱码,需重新插入或转换编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值