解决MySQL无法输入中文字符的问题

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 解决MySQL无法输入中文字符的问题

问题描述

  • 下面是我这样exam表的结构
mysql> desc exam;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| chinese | decimal(3,1) | YES  |     | NULL    |       |
| math    | decimal(3,1) | YES  |     | NULL    |       |
| english | decimal(3,1) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
  • 然后我使用insert into语句往这个表中插入了一条记录
mysql> insert into exam values (1, '张三', 78, 89, 93);
  • 但是却报出了下面这样的错误
ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1

仔细阅读报错提示后,说是【位于第1行“name”列的字符串值“\xE5\xBC\xA0\xE4\xB8\x89”不正确】

问题排查

然后我思考了一下🤔可能是和当前数据库的字符集设置有关系,因为我在插入英文的时候是没有问题的

  • 然后便使用下面这句查看了一下当前我的MySQL的各种编码
show variables like '%character%';
  • 然后一查看就发现我的【character_set_database】数据库字符集为latin1,也就是拉丁文,对于这种字符集来说支持不了中文的
mysql> show variables like '%character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | latin1                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | latin1                                                     |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)

image.png

解决方案

然后来说一下该如何去解决这个问题,这里提供两种解决方案

1️⃣创建数据库时设置字符集为utf8

create database 数据库名 character set utf8;
  • 例如下面这里,我新创建了一个名为test的数据库,后面跟上character set utf8后,再去查看当前数据库的字符集就是utf8了
mysql> create database test character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> show variables like '%character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | latin1                                                     |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.00 sec)

💬 那有人就会说:这样不是很麻烦吗,每次去创建数据库都要手动指定一下字符集

  • 是的,所以你可以考虑第二种方案,做到一劳永逸

2️⃣修改数据库配置文件【比较麻烦】

什么是配置文件?

  • 用户配置文件就是在用户登录电脑时,或是用户在使用软件时,软件系统为用户所要加载所需环境的设置和文件的集合
  • 很多程序,内部支持多种“模式”,可以调整当前程序,让他应用那种模式。 因此就可以借助“开关”来切换模式!软件的开关通常会用一个“图形化界面”,但是对于 MySQL 等专用软件则一般没有对应的图形化界面表示开关。只是通过一个【专门的文件】,来保存这些开关。这个文件就是 “配置文件”

① 而对于MySQL的配置文件就叫做my.ini,我们可以通过【Everything】这个搜索工具来进行查找

image.png② 打开路径后我们就看到了这个文件,当然你也可以直接在C盘的MySQL安装位置中招(MySQL默认安在C盘)

⚠注意看我下面的两个备份文件,在修改重要的配置文件前要先进行备份

image.png

③ 然后我们就可以通过记事本等方式去打开这个配置文件

image.png

④ 接下去找到这两个地方,把前面的# + 空格去掉,并且在=后面加上utf8【注意这里一点空格也不要加!!!】

image.png

⑤ 在上面修改完配置文件,Ctrl + s后,找自己的电脑中找到【服务】,然后往下拉找到有关MySQL的,它便是你的MySQL服务器,重启一下即可

⚠注意在重启前要保证配置文件修改正确,否则MySQL会启动失败的

image.png⑥ 接下去就可以再次启动MySQL创建一个新的数据库去看看我们的数据库默认字符集是否改成utf8了

⚠注意之前创建的那个数据库要删掉,因为其默认的字符集就是[latin1]

image.png

⑦ 然后我们再试一下去插入一条带有中文字符的记录,就发现没问题了( •̀ ω •́ )y

mysql> insert into exam values (1, '李四', 79, 82, 92);
Query OK, 1 row affected (0.00 sec)

写在最后

再看完了上面的这些内容后,我们来聊聊有关MySQL报错的问题

  • 如果你使用过MySQL的话,就可以知道我们在初学CRUD的时候,会出现很多的报错,于是很多同学面对英文的报错就不知道该如何是好,就懒得学习了,这其实是不对的
  • 如果英语基础不太好的同学可以把报错的提示放在翻译软件中去进行查看,若是能看懂的话最好,如果看不懂的话可以去百度/CSDN搜搜看看,==学会去发现问题、排查问题,最后解决问题==


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 关系型数据库 MySQL
【Mysql】一学就会!一劳永逸的解决插入中文字符时的报错
【Mysql】一学就会!一劳永逸的解决插入中文字符时的报错
192 0
|
数据可视化 MySQL 关系型数据库
mysql命令框中向表中插入中文字符,在可视化工具MySQL Workbeach或phpMyAdmin中不显示或显示乱码的问题解决
mysql命令框中向表中插入中文字符,在可视化工具MySQL Workbeach或phpMyAdmin中不显示或显示乱码的问题解决一、问题导出     在刚刚开始学习MySQL数据库应用与开发这门课程的时候,老师建议我们使用可视化工具MySQL Workbeach进行数据库的相关管理,但是小编在mysql命令框使用insert命令向表中插入中文数据的时候发现出现了warnings警告,并且打开MySQL Workbeach查看输入数据的时候发现,输入的数据为空或者是?????几个问号,于是便想到了字符格式的问题。
1299 0
|
SQL 存储 关系型数据库
关于ORACLE和MYSQL中文字符乱码的根源剖析
关于数据库的字符集问题一直都是一个比较恶心的问题,如果不了解其实质可能一直 都搞不清楚这个问题的根源,只能出了问题去度娘,这里我打算兼容ORACLE和MYSQL对字符集 的处理来描述乱码出现的情形和如何防止乱码问题出现的可能,本文只用UTF-8和GBK为 例...
1759 0
|
关系型数据库 MySQL 数据库
mysql不能显示中文字符
有时候MYSQL查询数据有中文的,就会显示乱码。 先使用下面命令显示出mySQL当前字符集的变量值: show variables like ‘%character%’; 可以看到: character_set_client和character_set_results的value值都是latin1,显示这是无法显示中文的。
874 0
|
4天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
18 3
|
4天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
22 3
|
4天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
27 2