MySQL解决中文乱码

在 MySQL 中出现中文乱码问题,通常是由于字符集设置不一致导致的。以下从数据库、表、客户端等多个层面详细介绍解决中文乱码的方法。

1. 查看当前字符集设置

在处理中文乱码问题之前,需要先了解当前 MySQL 的字符集设置情况。可以使用以下命令查看:
-- 查看 MySQL 服务器的全局字符集设置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

上述命令会显示一系列与字符集和排序规则相关的变量及其值。常见的字符集变量包括 character_set_server(服务器默认字符集)、character_set_database(当前数据库默认字符集)、character_set_client(客户端字符集)等。

2. 数据库层面设置字符集

创建数据库时指定字符集

在创建数据库时,显式指定使用支持中文的字符集,如 UTF-8
CREATE DATABASE your_database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
  • utf8mb4 是 UTF-8 的超集,支持存储更多的字符,包括一些特殊的表情符号等。
  • utf8mb4_unicode_ci 是对应的排序规则,ci 表示不区分大小写。

修改已有数据库的字符集

如果数据库已经创建,可以使用以下命令修改其字符集:
 
ALTER DATABASE your_database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

3. 表层面设置字符集

创建表时指定字符集

在创建表时,同样指定使用 utf8mb4 字符集。
CREATE TABLE your_table_name (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    description TEXT
)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

修改已有表的字符集

对于已经存在的表,可以使用以下命令修改其字符集:
ALTER TABLE your_table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

4. 客户端层面设置字符集

命令行客户端

在使用 MySQL 命令行客户端连接数据库时,可以通过参数指定字符集。
mysql -u your_username -p --default-character-set=utf8mb4 your_database_name

或者在连接成功后,使用以下 SQL 语句设置客户端字符集:
 
 
SET NAMES utf8mb4;

这条语句实际上是同时设置了 character_set_clientcharacter_set_connection 和 character_set_results 三个变量为 utf8mb4

应用程序客户端

不同的编程语言和数据库连接库设置字符集的方式有所不同,以下是一些常见的示例:
Python(使用 mysql-connector-python
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="your_database_name",
    charset="utf8mb4"
)

mycursor = mydb.cursor()
# 执行 SQL 查询等操作
Java(使用 JDBC)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLConnectionExample {
    public static void main(String[] args) {
        try {
            String url = "jdbc:mysql://localhost:3306/your_database_name?useUnicode=true&characterEncoding=UTF-8";
            String user = "your_username";
            String password = "your_password";
            Connection conn = DriverManager.getConnection(url, user, password);
            // 执行 SQL 查询等操作
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

5. 配置文件层面设置字符集

可以通过修改 MySQL 的配置文件(通常是 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf)来全局设置字符集。在 [mysqld] 部分添加以下内容:
 
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

在 [client] 部分添加:
 
[client]
default-character-set = utf8mb4

修改配置文件后,需要重启 MySQL 服务使设置生效:
 
sudo systemctl restart mysql

通过以上步骤,确保数据库、表、客户端等各个层面的字符集设置一致,通常可以解决 MySQL 中的中文乱码问题。

posted on   数据派  阅读(7)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示