Mysql彻底解决中文乱码问题的方案(Illegal mix of collations for operation)

Mysql是一种常用的关系型数据库,也是Web开发中常用的数据库之一。但是,在中文字符的存储和操作中,经常出现乱码问题,这对于我们的数据处理非常不利。为了解决这个问题,我们需要采取一些特定的措施。

1. 查看当前系统所用的字符集

我们需要打开Mysql的命令行界面,输入以下命令:

show variables like '%char%';

这时,我们可以看到系统当前所用的各种字符集,包括字符集名称、字符集编码等,如下所示:

+--------------------------+-------------------------------------------------------+
| Variable_name            | Value                                                 |
+--------------------------+-------------------------------------------------------+
| character_set_client     | utf8mb4                                               |
| character_set_connection | utf8mb4                                               |
| character_set_database   | utf8mb4                                               |
| character_set_filesystem | binary                                                |
| character_set_results    | utf8mb4                                               |
| character_set_server     | utf8mb4                                               |
| character_set_system     | utf8                                                  |
| character_sets_dir       | /usr/share/mysql-8.0.23-linux-glibc2.17-x86_64/charsets/ |
+--------------------------+-------------------------------------------------------+

2. 修改数据库字符集

我们需要打开Mysql的命令行界面,进入需要修改字符集的数据库中,输入以下命令:

ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

其中,database_name是需要修改字符集的数据库名称,utf8mb4是字符集名称,utf8mb4_general_ci是字符集的排序规则,根据实际情况来选择。

3. 修改数据表字符集

我们需要打开Mysql的命令行界面,进入需要修改字符集的数据表中,输入以下命令:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

其中,table_name是需要修改字符集的数据表名称,utf8mb4是字符集名称,utf8mb4_general_ci是字符集的排序规则,根据实际情况来选择。

示例1:数据库和数据表都采用utf8mb4

假设我们要创建一个数据库和一个数据表,用来存储中文数据。我们可以通过以下命令来创建:

CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE test;
CREATE TABLE user (id INT(11) AUTO_INCREMENT, name VARCHAR(16), PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

执行完成后,我们可以通过以下命令来查看字符集和排序规则:

show variables like '%char%';
SHOW FULL COLUMNS FROM user;

结果应该如下所示:

+--------------------------+-------------------------------------------------------+
| Variable_name            | Value                                                 |
+--------------------------+-------------------------------------------------------+
| character_set_client     | utf8mb4                                               |
| character_set_connection | utf8mb4                                               |
| character_set_database   | utf8mb4                                               |
| character_set_filesystem | binary                                                |
| character_set_results    | utf8mb4                                               |
| character_set_server     | utf8mb4                                               |
| character_set_system     | utf8                                                  |
| character_sets_dir       | /usr/share/mysql-8.0.23-linux-glibc2.17-x86_64/charsets/ |
+--------------------------+-------------------------------------------------------+

+-------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type         | Collation       | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int          | NULL            | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| name  | varchar(16)  | utf8mb4_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |
+-------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+

示例2:数据库和数据表采用utf8mb4和gbk

假设我们已经有了一个默认采用gbk编码的数据库test_gbk,其中包含一个数据表user_gbk。现在我们想要创建一个新的字符集为utf8mb4的数据库test_utf8,其中包含一个数据表user_utf8,我们可以通过以下命令来创建:

CREATE DATABASE test_utf8 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE test_utf8;
CREATE TABLE user_utf8 (id INT(11) AUTO_INCREMENT, name VARCHAR(16), PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

USE test_gbk;
ALTER DATABASE test_gbk CHARACTER SET gbk COLLATE gbk_chinese_ci;
ALTER TABLE user_gbk CONVERT TO CHARACTER SET gbk COLLATE gbk_chinese_ci;

执行完成后,我们可以通过以下命令来查看字符集和排序规则:

show variables like '%char%';
SHOW FULL COLUMNS FROM user_utf8;
SHOW FULL COLUMNS FROM test_gbk.user_gbk;

结果应该如下所示:

+--------------------------+-------------------------------------------------------+
| Variable_name            | Value                                                 |
+--------------------------+-------------------------------------------------------+
| character_set_client     | utf8mb4                                               |
| character_set_connection | utf8mb4                                               |
| character_set_database   | utf8mb4                                               |
| character_set_filesystem | binary                                                |
| character_set_results    | utf8mb4                                               |
| character_set_server     | utf8mb4                                               |
| character_set_system     | utf8                                                  |
| character_sets_dir       | /usr/share/mysql-8.0.23-linux-glibc2.17-x86_64/charsets/ |
+--------------------------+-------------------------------------------------------+

+-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type        | Collation       | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int         | NULL            | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| name  | varchar(16) | utf8mb4_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |
+-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+

+-------+-------------+------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type        | Collation        | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+-------------+------------------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int         | NULL             | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| name  | varchar(16) | gbk_chinese_ci   | YES  |     | NULL    |                | select,insert,update,references |         |
+-------+-------------+------------------+------+-----+---------+----------------+---------------------------------+---------+

通过以上的步骤,我们可以已经成功地解决了Mysql中文乱码的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql彻底解决中文乱码问题的方案(Illegal mix of collations for operation) - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Django 连接mysql数据库中文乱码

    2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566   版本:CentOS6.8 python3.6.4 django1.8.2 数据库pymysql 我使用的终端是CentOS终端,CentOS桌面版安装的pycham,windows使用Navicat连接mysql数据库。 我遇到的情况大致这样,在CentOS终端进入mysql,然后查…

    MySQL 2023年4月13日
    00
  • 简单解决Windows中MySQL的中文乱码与服务启动问题

    下面就为大家详细讲解“简单解决Windows中MySQL的中文乱码与服务启动问题”的完整攻略。 问题描述 在 Windows 系统下使用 MySQL 数据库时,有时会遇到以下两个问题: 修改 MySQL 数据库中文编码后,出现中文乱码; 启动 MySQL 服务失败。 解决方案 问题一:修改 MySQL 数据库中文编码后,出现中文乱码 步骤一:修改 MySQL…

    MySQL 2023年5月18日
    00
  • 初步认知MySQL metadata lock(MDL)

    概述 随着5.5.3引入MDL,更多的Query被“Waiting for table metadata lock”给’炕’了SHOW PROCESSLIST的输出也有之前的”Locked”变得粒度更加细的’Waiting for table metadata lock’引入MDL,当需要访问、修改表结构时,都需要对元数据上锁(读/写)MDL在Server层…

    MySQL 2023年4月13日
    00
  • Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘zhongfucheng.user’ does

    编写第一个Hibernate程序的时候,就发现出现了错误 Exception in thread “main” org.hibernate.exception.SQLGrammarException: could not insert: [zhongfucheng.domain.User] at org.hibernate.exception.SQLStat…

    MySQL 2023年4月12日
    00
  • SQL Server 出现Error: 1326错误(管理器无法连接远程数据库)问题解决方案

    以下是详细讲解“SQL Server 出现Error: 1326错误(管理器无法连接远程数据库)问题解决方案”的完整攻略: 问题描述 在使用SQL Server Management Studio连接SQL Server数据库时,可能会出现Error: 1326错误的情况,无法连接远程数据库。 问题原因 这种错误通常是由于以下原因之一造成的: DNS解析问题…

    MySQL 2023年5月18日
    00
  • MySQL 配置文件my.cnf 例子最详细翻译

    MySQL 是一款广泛用于数据库开发的软件,而对于其配置文件 my.cnf 的配置,则是保证 MySQL 运行正常且高效的关键所在。下面,我们就来详细讲解一下如何进行 my.cnf 文件的配置。 1. 确定 my.cnf 的位置 在讲述如何配置 my.cnf 文件之前,我们需要先确定 my.cnf 的位置,因为它在不同系统上可能有不同的位置。在 Linux …

    MySQL 2023年5月19日
    00
  • mySQL之关键字的执行优先级讲解

    MySQL之关键字的执行优先级讲解 MySQL中有大量的关键字,这些关键字在语句执行时都有各自的优先级。正确理解这些优先级能够帮助我们写出更高效、正确的SQL语句。 1.执行优先级 MySQL中关键字的执行优先级,从高到低依次为: 括号 乘除法 加减法 比较运算符 逻辑运算符 比较运算符和逻辑运算符中,优先级相同的运算符从左到右依次执行。 2.示例说明 示例…

    MySQL 2023年5月19日
    00
  • MySQL8.0与MySQL5.7的区别详解

    MySQL 8.0 与 MySQL 5.7 的区别详解 MySQL 8.0 相对于 MySQL 5.7 ,在很多方面做了重大的更新和改进。下面详细讲解 MySQL 8.0 与 MySQL 5.7 的区别。 新增特性和功能 MySQL 8.0 版本增加了许多新的功能和特性,比如下面几个。 安全性 MySQL 8.0 增强了安全性,除了支持更多的密钥长度之外,还…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部