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

yizhihongxing

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日

相关文章

  • MySQL中数据类型相关的优化办法

    当涉及到MySQL中数据类型的优化时,我们需要关注以下几点: 1. 选择合适的数据类型 在MySQL中,每种数据类型都有其对应的存储空间和范围限制。因此,我们需要根据业务需求,选择合适的数据类型。 例如,如果一个字段的取值范围只有0~255,那么我们可以使用TINYINT类型来节约存储空间。再比如,如果一个字段允许空值,我们可以使用NULL作为默认值,而不是…

    MySQL 2023年5月19日
    00
  • 分析MySQL抛出异常的几种常见解决方式

    分析MySQL抛出异常的几种常见解决方式 MySQL 是一种常用的数据库管理系统,但在使用 MySQL 时也会遇到一些常见的异常情况。以下是解决这些异常情况的几种方法: 1. 处理连接超时异常 连接超时是一种非常常见的异常情况。当使用 MySQL 连接时,如果在指定的时间内没有接收到响应,则会抛出连接超时异常。处理连接超时异常的一种方法是在连接时使用 con…

    MySQL 2023年5月18日
    00
  • CentOS7 安装MySQL8修改密码

    1. 添加MySQL8的本地源 执行以下命令获取安装MySQL源 [root@virde ~]# wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm [root@virde ~]# sudo yum localinstall mysql80-community-rel…

    MySQL 2023年4月13日
    00
  • MySQL服务器默认安装之后调节性能的方法

    针对MySQL服务器默认安装之后调节性能的方法,我这里提供以下攻略: 步骤一:修改配置文件 MySQL服务器默认安装之后,可以通过修改配置文件来调节其性能。常见的配置文件位于/etc/mysql/my.cnf(Ubuntu)或/etc/my.cnf(CentOS)。 打开终端,输入以下命令: bash sudo vi /etc/mysql/my.cnf 在文…

    MySQL 2023年5月19日
    00
  • MySQL 1303错误的解决方法(navicat)

    下面是详细的MySQL 1303错误的解决方法(navicat)攻略: 1. 什么是MySQL 1303错误? MySQL 1303错误指的是当用户账户拥有的权限不足以访问或修改某个数据库中的表或数据时,导致的错误。该错误通常会在使用navicat等MySQL管理工具进行数据库操作时出现。 2. 解决MySQL 1303错误的方法 下面是解决MySQL 13…

    MySQL 2023年5月18日
    00
  • 详解MySQL LEFT/RIGHT JOIN:外连接

    MySQL的LEFT JOIN和RIGHT JOIN都是外连接(Outer Join)的一种形式,意味着即使没有匹配的行,也会返回从另一张表(左连接的情况是左表,右连接的情况是右表)中的所有行。 LEFT JOIN 左连接(LEFT JOIN)返回左表中的所有行,以及右表中的匹配行。如果右表中没有与左表中的行匹配的行,则返回NULL值。 语法: SELECT…

    MySQL 2023年3月9日
    00
  • 详解MySQL InnoDB的索引扩展

    MySQL InnoDB索引扩展详解 InnoDB是MySQL中,一个常用的事务性存储引擎,也是MySQL5.5版本以后默认的存储引擎。InnoDB对于数据的存储以及索引都有自己的特定优化策略,本文主要探讨InnoDB在索引扩展上的优化方式。 InnoDB的索引类型 InnoDB支持B-Tree索引(默认)、全文索引,以及R-Tree索引和哈希索引。 B-T…

    MySQL 2023年5月19日
    00
  • php中关于mysqli和mysql区别的一些知识点分析

    mysqli与mysql的区别 MySQLi是MySQL的一种改进版本,和MySQL相比,MySQLi提供了更好的性能、更好的功能,还支持面向对象和过程式API。 MySQLi相对于MySQL来说有以下的不同: MySQLi支持面向对象和过程式的接口,而MySQL仅支持过程式的接口。 MySQLi包含了MySQL的所有功能,还新增加了一些特有的功能和优化。 …

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