MySQL解决中文乱码

MySQL解决中文乱码

数据

聚焦技术和人文,分享干货,共同成长。

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_client、character_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

2025-02-13 09:47

阿陶学长

阅读(765)

评论(0)

收藏

举报

刷新页面返回顶部

相关科技文章

Dsquared2是什么牌子?是什么档次?
beat365手机版官方

Dsquared2是什么牌子?是什么档次?

⌚ 11-04 👁️ 6395
世界各国家的缩写与国家数字代码
beat365手机版官方

世界各国家的缩写与国家数字代码

⌚ 07-01 👁️ 4806
20191117 西安CKU快报 XI AN ALL
365比分足球官网

20191117 西安CKU快报 XI AN ALL

⌚ 10-22 👁️ 5549
宝宝发烧测量哪个位置准确
365比分足球官网

宝宝发烧测量哪个位置准确

⌚ 01-07 👁️ 4901
22个在家就能做的科学小实验,100%父母都收藏!
365平台网页版登录官网

22个在家就能做的科学小实验,100%父母都收藏!

⌚ 09-24 👁️ 3232
Twitter 账号为何被封以及如何防止封号?
365平台网页版登录官网

Twitter 账号为何被封以及如何防止封号?

⌚ 08-19 👁️ 5866

合作伙伴