我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql乱码现象及对字符集的理解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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.库和表的字符集可以不一样,遇到问题评估下是重导表还是重导库

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql乱码现象及对字符集的理解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP字符集编码出现乱码怎么解决

这篇文章主要讲解了“PHP字符集编码出现乱码怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP字符集编码出现乱码怎么解决”吧!要么页面原始汉字和从数据库里取出的汉字全是乱码;要么原
2023-06-17

第09期:有关 MySQL 字符集的乱码问题

相信大家通过前几篇文章,已经了解了 MySQL 字符集使用相关注意事项。那么数据乱码问题在这儿显得就非常简单了,或许说可能不会出现这样的问题。数据之所以会乱码,在 MySQL 里无非有以下几类情况:一、转码失败在数据写入到表的过程中转码失败,数据库端也没有进行
第09期:有关 MySQL 字符集的乱码问题
2018-01-21

详解Python字符串对象的实现

PyStringObject 结构体 Python 中的字符串对象在内部对应一个名叫 PyStringObject 的结构体。“ob_shash” 对应字符串经计算过的 hash值, “ob_sval” 指向一段长度为 “ob_size”
2022-06-04

PHP程序中文字符集处理技巧:解决乱码问题

标题:PHP程序中文字符集处理技巧:解决乱码问题,需要具体代码示例随着互联网的快速发展,中文网站的开发变得越来越普遍。在PHP程序中,处理中文字符集是一个常见的问题,特别是在涉及到数据库操作和页面输出时,经常会遇到中文乱码问题。本篇文章将
PHP程序中文字符集处理技巧:解决乱码问题
2024-03-07

解决linux的redhat版上mysql字符乱码的问题

linux上安装了mysql服务,默认的字符编码不是utf8,所以会出现中文乱码。 解决方案如下: 1、修改文件/etc/my.cnf,在mysqld配置的最后一行加上character-set-server=utf8 vi /etc/my
2022-06-04

PHP对象转字符的实现方法详解

PHP是一种广泛应用于服务器端开发的编程语言,它具有强大的面向对象特性。在PHP中,对象是一种数据结构,通常用于存储数据和方法以便在程序中重复使用。但有时候需要将对象转换为字符串,例如在日志记录或者数据传输等场景中。本文将详细介绍PHP对象
PHP对象转字符的实现方法详解
2024-03-06

解决JavaEE开发中字符编码出现乱码的问题

网上有很多处理字符编码的解决方案,在此,我站着前人的肩膀上作自己的总结。在我看来,出现乱码问题的解决方法无非就是在3个地方进行编码设置:1.HTML、JSP等前端页面;2.后台servlet中request和response对象;3.服务器
2023-05-31

编程热搜

目录