mysql乱码现象及对字符集的理解
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,数据库版本是5.7.17现象1Navicat Premium导sqlserver数据到mysql时,发现一些表只导了表结构没有导入数据,一些表导入了部分数据,一些表数据全部导入成功查找原因:1.发现导
千家信息网最后更新 2025年11月15日mysql乱码现象及对字符集的理解数据库版本是5.7.17
现象1
Navicat Premium导sqlserver数据到mysql时,发现一些表只导了表结构没有导入数据,一些表导入了部分数据,一些表数据全部导入成功
查找原因:
1.发现导入成功的数据都是没有任何中文的
2.在mysql上删除只导了表结构没有导入数据的表A,使用Navicat Premium重新表A,查看Navicat Premium导入日志[Err] [Row1] [Imp] 1366 - Incorrect string value: '\xE6\xAD\xA3\xE5\xB8\xB8...' for column 'colunmname1' at row 1
3.在sqlserver上查看select colunmname1 from A发现都是中文内容
至此查出原因:就是因为简体中文的原因,导致没有导入成功
解决方法
方法1:在mysql上查询表A的建表语句show create table A,发现建表语句最后是CHARSET=latin1,重新修改表A的建表语句把CHARSET=latin1改成CHARSET=utf8,再删除表A,再重新建立表A,再导表就OK了
方法2:mysql -uroot -p123456
mysql>show variables like 'char%';发现库里面的字符集character_set_database是latin1
修改/etc/my.cnf新增如下配置
[mysqld]下新增character-set-server=utf8
[mysql]下新增default-character-set=utf8
[client]下新增default-character-set=utf8
service mysqld restart
再在mysql上drop导入没有完全成功的表,再重新导表(当然在个人实验中,导入还是继续报错的,因为mysql -uroot -p123456进去后没有选择库,修改后只是新增库的字符集会变成utf8,当然选择了库也没用,虽然重启了数据库,但表A对应的库如DATABASEA是修改配置之前建立的,它的字符集还是latin1,除非重建DATABASEA把字符集修改为utf8,这样风险太高,里面的东西都得重新弄过一次)
现象2
mysql字符集都是utf8了,但是在个人的windows机器上使用SQLyogEnt查询表A,发现中文乱码,加上语句后SET character_set_results=gbk后才不乱码
而在个人的windows机器上使用putty登录mysql服务器使用mysql>查询发现表A不乱码
原因:
个人电脑cmd输入chcp值是936对应简体中文
mysql服务器echo $LANG显示是zh_CN.UTF-8
在windows上通过工具SQLyogEnt连接mysql查询,其实是在windows上查询,使用的是windows的字符集gbk,但是mysql字符集是utf8,所以会乱码
在windows上通过putty连接mysql服务器查询,其实就是在mysql服务器端查询,mysql服务器字符集UTF-8,mysql字符集是utf8,所以不会乱码
理解
1.mysql安装后数据库字符集默认是latin1
2.my.cnf修改字符集配置并重启后,只是对新增的库生效,老库还是latin1,老库新增表也还是随老库latin1
3.库和表的字符集可以不一样,遇到问题评估下是重导表还是重导库
现象1
Navicat Premium导sqlserver数据到mysql时,发现一些表只导了表结构没有导入数据,一些表导入了部分数据,一些表数据全部导入成功
查找原因:
1.发现导入成功的数据都是没有任何中文的
2.在mysql上删除只导了表结构没有导入数据的表A,使用Navicat Premium重新表A,查看Navicat Premium导入日志[Err] [Row1] [Imp] 1366 - Incorrect string value: '\xE6\xAD\xA3\xE5\xB8\xB8...' for column 'colunmname1' at row 1
3.在sqlserver上查看select colunmname1 from A发现都是中文内容
至此查出原因:就是因为简体中文的原因,导致没有导入成功
解决方法
方法1:在mysql上查询表A的建表语句show create table A,发现建表语句最后是CHARSET=latin1,重新修改表A的建表语句把CHARSET=latin1改成CHARSET=utf8,再删除表A,再重新建立表A,再导表就OK了
方法2:mysql -uroot -p123456
mysql>show variables like 'char%';发现库里面的字符集character_set_database是latin1
修改/etc/my.cnf新增如下配置
[mysqld]下新增character-set-server=utf8
[mysql]下新增default-character-set=utf8
[client]下新增default-character-set=utf8
service mysqld restart
再在mysql上drop导入没有完全成功的表,再重新导表(当然在个人实验中,导入还是继续报错的,因为mysql -uroot -p123456进去后没有选择库,修改后只是新增库的字符集会变成utf8,当然选择了库也没用,虽然重启了数据库,但表A对应的库如DATABASEA是修改配置之前建立的,它的字符集还是latin1,除非重建DATABASEA把字符集修改为utf8,这样风险太高,里面的东西都得重新弄过一次)
现象2
mysql字符集都是utf8了,但是在个人的windows机器上使用SQLyogEnt查询表A,发现中文乱码,加上语句后SET character_set_results=gbk后才不乱码
而在个人的windows机器上使用putty登录mysql服务器使用mysql>查询发现表A不乱码
原因:
个人电脑cmd输入chcp值是936对应简体中文
mysql服务器echo $LANG显示是zh_CN.UTF-8
在windows上通过工具SQLyogEnt连接mysql查询,其实是在windows上查询,使用的是windows的字符集gbk,但是mysql字符集是utf8,所以会乱码
在windows上通过putty连接mysql服务器查询,其实就是在mysql服务器端查询,mysql服务器字符集UTF-8,mysql字符集是utf8,所以不会乱码
理解
1.mysql安装后数据库字符集默认是latin1
2.my.cnf修改字符集配置并重启后,只是对新增的库生效,老库还是latin1,老库新增表也还是随老库latin1
3.库和表的字符集可以不一样,遇到问题评估下是重导表还是重导库
字符
字符集
数据
查询
乱码
服务器
还是
中文
服务
成功
个人
原因
语句
数据库
方法
配置
现象
只是
就是
是在
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
公安部网络安全保卫局张华
长沙晨鑫网络技术有限公司
服务业软件开发税率
怎么样管理服务器
计算机网络技术需要学什么书
sql后缀文件怎么导入数据库
南京直销软件开发公司有哪些
qq旋风代理服务器
2018年9月三级网络技术
网络安全与技术学什么
网络安全办公室设在什么部门
瑞典语翻译软件开发
数据库视图修改语句
怎么学好网络安全与执法
诺基亚9数据库
网络安全评估1 x干嘛的
扬州网络安全派出所
华为网络技术实训
水牛网络技术
信息发布视频服务器
软件开发为什么转行
土豆服务器干什么的
电脑服务器对电磁铁有影响吗
软件开发实践指南
幽灵行动找到主数据库服务器
拓域网络技术有限公司
苏州 软件开发个体户
网络安全事件主要由哪些组成
24盘位塔式服务器
南京软件开发实习生工资