解决MySQL向表中增加数据插入中文乱码问题

Posted 藕粉-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决MySQL向表中增加数据插入中文乱码问题相关的知识,希望对你有一定的参考价值。

文章目录


前言

在命令行使用mysql创建表后向表中增加数据时出现的中文乱码问题,我安装的MySQL版本是MySQL 5.7,在MySQL 8.0版本之后的不会出现这种问题,所以这是基于MySQL 5.7版本而言的

mysql> insert into student values(1002,'张三');
ERROR 1366 (HY000): Incorrect string value: '\\xD5\\xC5\\xC8\\xFD' for column 'name' at row 1

一、为什么会出现这种ERROR

这是源于MySQL中默认的字符集是Latin1所致,当我们使用中文添加入表中时就会出现中文乱码,从而报错,产生ERROR

二、解决步骤

1:查看编码命令

在命令行中使用如下命令

show variables like 'character_%';
show variables like 'collation_%';

2.修改MySQL的数据目录下的my.ini配置文件

修改配置文件使用高级文本编辑器,我这里使用的是Sublime Text 3,使用记事本等软件打开修改后可能会导致文件编码修改为“含BOM头”的编码,从而服务重启失败。

default-character-set=utf8 #默认字符集
[mysqld] # 大概在76行左右,在其下添加
...
character-set-server=utf8
collation-server=utf8_general_ci

3.重启MySQL服务

这里可以手动关闭或者使用命令行来重启MySQL服务,下图是使用命令行重启MySQL服务

4.重新查看编码命令

继续在命令行中使用如下命令

show variables like 'character_%';
show variables like 'collation_%';

5.重新向表中添加中文数据

注意

这里要注意噢,要注意之前创建的表的字符集是Latin1,所以在添加中文的时候会报ERROR,这里的解决方法就是直接删除数据库,重新创建库,默认的就是utf8啦

重新创建数据库

重新创建表后向表中添加中文数据


总结

以上就是解决MySQL向表中增加数据插入中文乱码问题,仅针对MySQL 5.7 版本,MySQL 8.0版本默认的字符集就是utf8,可以直接向表中插入中文数据。原理还是修改字符集的默认方式,utf8字符集。
如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL 8.0开始,数据库的默认编码改为 utf8mb4 ,从而避免了上述的乱码问题。

SQL Server插入中文乱码

如果数据库的Collocation是英文的,字段是varchar类型,向表中插入中文数据,会出现乱码。

解决方法:

方法1. 修改varchar 为 nvarchar类型, 并在插入数据前加N,例如: insert into table_name(a) values (N\'中文\')

方法2. 如果不修改字段类型,还是varchar, 则需要修改数据库的Collocation为 中文,参考

---------------------------------------------------------------------------------------------------------

还有一种,在建表时,指定某个字段的语言,

方法 COLLATE Chinese_PRC_CS_AS_WS

示例:

create table test
(
a varchar(255) COLLATE Chinese_PRC_CS_AS_WS NULL, 
b varchar(255) COLLATE sql_latin1_general_cp1_ci_as NULL 
)

 

测试:

insert test values(\'中文\',\'中文\')

插入后 字段 a 为 中文 ,b 为 ??

---------------------------------------------------------------------------------------------------------

若是使用存储过程插入数据的话,需要将对应的参数类型改为nvarchar。

示例:
create PROCEDURE [dbo].[export_Create] 

@C_HM nvarchar(128) 
AS 
INSERT INTO export 
([C_CCH]) 
values 
(@C_HM) 

在表格中,C_CCH为varchar类型。

以上是关于解决MySQL向表中增加数据插入中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么在mysql的表中插入一条数据

SQL Server插入中文乱码

Mysql向表中循环插入数据

如何使用mysql语句向表中插入数据

perl dbi mysql 向表中插入数据速度很慢

解决Linux系统下Mysql数据库中文显示成问号的问题