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日

相关文章

  • MySQL操作文件的的6种方法

    MySQL提供了几种方法来处理文件。以下是常用的MySQL操作文件的方法: LOAD DATA INFILE LOAD DATA INFILE是MySQL中导入文件的最常用方法。它使用简单,速度快,并且可以导入各种格式的文件(如txt、csv、excel等)。以下是使用LOAD DATA INFILE导入.txt文件的示例: LOAD DATA INFILE…

    MySQL 2023年3月9日
    00
  • MySQL数据库导入导出数据之报错解答实例讲解

    我们来详细讲解“MySQL数据库导入导出数据之报错解答实例讲解”。首先,数据库导入导出数据是数据库管理中非常常见和重要的操作,但有时候我们在导入导出数据时会遇到一些问题,如报错等。本文将从以下几个方面给大家深入的介绍如何解决数据库导入导出数据的报错问题: 导出数据时如何避免空数据报错 导入数据时如何解决字符集不匹配问题 导入数据时如何解决导入数据量过大的问题…

    MySQL 2023年5月18日
    00
  • Java面试之MySQL

    164. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。 第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。 第三范式:任何非主属性不依赖于其它非主属性。 表类型如果是 MyISAM ,那 id 就是 8。 表类型如果是 InnoDB,那 id 就是 6。 16…

    MySQL 2023年4月12日
    00
  • 存储过程

    存储过程 介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用,类似于函数或者说API,封装了系列操作,暴露接口给你进行操作。 特点 封装,复用 可以接收参数,也…

    MySQL 2023年5月8日
    00
  • MySQL 数据类型选择原则

    MySQL 数据类型选择是数据库设计中非常重要的一步。在选择数据类型的时候,我们需要根据具体的业务需求来选择。以下是几个选择MySQL数据类型的原则: 1. 尽量使用MySQL内置类型 MySQL提供了很多内置类型,这些类型已经经过优化,使用效率较高,而且保证数据的正确性和一致性。例如:INT, VARCHAR, DECIMAL, DATE和TIME等。 2…

    MySQL 2023年5月19日
    00
  • Centos 6.3将Mysql 5.1.61升级为mysql 5.6.19遇到的问题及解决方式

    更新yum源 CentOS 6.3自带的yum源中没有MySQL5.6,则需要添加新的yum源。 示例: sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 卸载旧版本Mysql 如果系统中已经安装了旧版本的MySQL,则需要卸载掉。 示例: sudo…

    MySQL 2023年5月18日
    00
  • Navicat连接虚拟机mysql常见错误问题及解决方法

    Navicat连接虚拟机mysql常见错误问题及解决方法 通过Navicat连接虚拟机中的MySQL数据库时,可能会遇到一些常见的错误问题,在这里,我们将介绍这些问题以及如何解决它们。本文以Ubuntu作为虚拟机系统。 确认MySQL服务已启动 在Navicat连接虚拟机MySQL时,需要保证MySQL服务已经成功启动。我们可以通过以下命令进行确认: sud…

    MySQL 2023年5月18日
    00
  • MySQL创建视图(CREATE VIEW)

    MySQL中的视图是一个虚拟表,其内容基于 SELECT 语句定义,可以被用户查询。视图使得我们可以简化复杂的查询和抽象复杂的数据结构,从而提高数据查询和管理的效率。 创建视图的基本语法如下: CREATE VIEW view_name AS SELECT column1, column2, … FROM table WHERE condition; 其…

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