mysql模糊查询中文乱码
时间: 2025-07-21 14:31:15 浏览: 15
在MySQL中执行模糊查询时,若涉及中文字符出现乱码问题,通常是由于字符集设置不当或SQL语句编写不规范导致的。以下是解决此类问题的详细方法:
### 1. 确保数据库、表和字段的字符集设置正确
MySQL中字符集的设置需要从服务器、数据库、表到字段逐层统一。推荐使用`utf8mb4`字符集以支持完整的中文字符(包括表情符号)。
```sql
-- 查看数据库字符集
SHOW VARIABLES LIKE 'character_set_database';
-- 查看数据表字符集
SHOW CREATE TABLE your_table;
-- 修改数据库字符集
ALTER DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改数据表字符集
ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
上述操作确保了数据库和表使用`utf8mb4`字符集,这是支持中文字符的基础[^1]。
### 2. 设置连接字符集
在客户端连接MySQL时,必须确保连接使用的字符集与数据库一致。可以在连接后执行以下语句:
```sql
SET NAMES 'utf8mb4';
```
该语句将客户端连接的字符集设置为`utf8mb4`,确保传输过程中中文字符不会被错误转换。
### 3. 在SQL语句中正确使用通配符和参数化查询
当使用`LIKE`进行模糊查询时,应避免直接拼接字符串,而应使用参数化查询方式,确保传入的中文参数不会因编码问题而被错误处理。
以MyBatis为例,正确的模糊查询语句应如下:
```xml
<select id="selectStudentsLike" resultType="Student">
SELECT * FROM t_student WHERE name LIKE CONCAT('%', #{condition}, '%')
</select>
```
这种方式通过`CONCAT`函数拼接通配符,避免了直接在SQL中使用`%#{condition}%`可能导致的语法错误和乱码问题[^4]。
### 4. 检查客户端和服务器端的字符集配置
MySQL服务器的默认字符集应在配置文件`my.cnf`或`my.ini`中明确设置:
```ini
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
```
重启MySQL服务后,使用以下命令验证:
```sql
SHOW VARIABLES LIKE 'character_set_%';
```
确保所有相关变量(如`character_set_client`、`character_set_connection`、`character_set_results`)均为`utf8mb4`[^1]。
### 5. 使用`mysqldump`导出时指定字符集
如果涉及数据库迁移或备份恢复,应在导出时指定字符集以避免乱码:
```bash
mysqldump -u root -p --default-character-set=utf8mb4 --set-charset=utf8mb4 database_name > backup.sql
```
此命令确保导出的数据使用`utf8mb4`字符集,避免恢复时出现中文乱码[^2]。
### 6. 验证查询结果
执行模糊查询后,检查返回结果是否正常显示中文。例如:
```sql
SELECT * FROM t_student WHERE name LIKE '%张%';
```
若结果正常显示中文,则说明字符集和查询语句均配置正确。
---
阅读全文
相关推荐




















