mysql gbk_MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题
MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题
更新时间:2012年08月27日 21:17:11 作者:
MYSQL中文乱码问题原因有很多,脚本之家以前发布过很多相关文章,这篇文章介绍mysql相关的一些知识更详细
MySQL中涉及的几个字符集
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。
character-set-database:数据库字符集。
character-set-table:数据库表字符集。
优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。
character-set-client:客户端的字符集。客户端默认字符集。当客户端向服务器发送请求时,请求以该字符集进行编码。
character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。
在客户端,如果没有定义character-set-results,则采用character-set-client字符集作为默认的字符集。所以只需要设置character-set-client字符集。
要处理中文,则可以将character-set-server和character-set-client均设置为GB2312,如果要同时处理多国语言,则设置为UTF8。
关于MySQL的中文问题
解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集。
character_set_client:客户端的字符集。
character_set_results:结果字符集。
character_set_connection:连接字符集。
设置这三个系统参数通过向MySQL发送语句:set names gb2312
关于GBK、GB2312、UTF8
UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。
GB2312是GBK的子集,GBK是GB18030的子集
GBK是包括中日韩字符的大字符集合
如果是中文的网站 推荐GB2312 GBK有时还是有点问题
为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便
UTF-8可以看作是大字符集,它包含了大部分文字的编码。
使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。
gb2312是简体中文的码
gbk支持简体中文及繁体中文
big5支持繁体中文
utf-8支持几乎所有字符
首先分析乱码的情况1.写入数据库时作为乱码写入
2.查询结果以乱码返回
究竟在发生乱码时是哪一种情况呢?
我们先在mysql 命令行下输入
show variables like '%char%';
查看mysql 字符集设置情况:
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | gbk |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
在查询结果中可以看到mysql 数据库系统中客户端、数据库连接、数据库、文件系统、查询
结果、服务器、系统的字符集设置
在这里,文件系统字符集是固定的,系统、服务器的字符集在安装时确定,与乱码问题无关
乱码的问题与客户端、数据库连接、数据库、查询结果的字符集设置有关
*注:客户端是看访问mysql 数据库的方式,通过命令行访问,命令行窗口就是客户端,通
过JDBC 等连接访问,程序就是客户端
我们在向mysql 写入中文数据时,在客户端、数据库连接、写入数据库时分别要进行编码转
换
在执行查询时,在返回结果、数据库连接、客户端分别进行编码转换
现在我们应该清楚,乱码发生在数据库、客户端、查询结果以及数据库连接这其中一个或多
个环节
接下来我们来解决这个问题
在登录数据库时,我们用mysql --default-character-set=字符集-u root -p 进行连接,这时我们
再用show variables like '%char%';命令查看字符集设置情况,可以发现客户端、数据库连接、
查询结果的字符集已经设置成登录时选择的字符集了
如果是已经登录了,可以使用set names 字符集;命令来实现上述效果,等同于下面的命令:
set character_set_client = 字符集
set character_set_connection = 字符集
set character_set_results = 字符集
如果是通过JDBC 连接数据库,可以这样写URL:
URL=jdbc:mysql://localhost:3306/abs?useUnicode=true&characterEncoding=字符集
JSP 页面等终端也要设置相应的字符集
数据库的字符集可以修改mysql 的启动配置来指定字符集,也可以在create database 时加上
default character set 字符集来强制设置database 的字符集
通过这样的设置,整个数据写入读出流程中都统一了字符集,就不会出现乱码了
为什么从命令行直接写入中文不设置也不会出现乱码?
可以明确的是从命令行下,客户端、数据库连接、查询结果的字符集设置没有变化
输入的中文经过一系列转码又转回初始的字符集,我们查看到的当然不是乱码
但这并不代表中文在数据库里被正确作为中文字符存储
举例来说,现在有一个utf8 编码数据库,客户端连接使用GBK 编码,connection 使用默认
的ISO8859-1(也就是mysql 中的latin1),我们在客户端发送“中文”这个字符串,客户端
将发送一串GBK 格式的二进制码给connection 层,connection 层以ISO8859-1 格式将这段
二进制码发送给数据库,数据库将这段编码以utf8 格式存储下来,我们将这个字段以utf8
格式读取出来,肯定是得到乱码,也就是说中文数据在写入数据库时是以乱码形式存储的,
在同一个客户端进行查询操作时,做了一套和写入时相反的操作,错误的utf8 格式二进制
码又被转换成正确的GBK 码并正确显示出来。
相关文章
这篇文章主要为大家详细介绍了Windows下mysql5.7.18安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-07-07
这篇文章主要介绍了mysql group_concat实现把分组字段写成一行的方法,结合实例形式分析了group_concat函数的功能、查询用法及相关操作技巧,需要的朋友可以参考下2019-10-10
这篇文章主要介绍了JDBC链接mysql插入数据后显示问号的原因及解决办法的相关资料,需要的朋友可以参考下2016-04-04
这篇文章主要介绍了MySQL中union和join语句的用法区别,举例说明了union和join在连接操作上的不同作用,需要的朋友可以参考下2015-12-12
这篇文章主要介绍了MySQL触发器简单用法,结合实例形式分析了mysql触发器的创建、执行、查看、删除等相关操作技巧,需要的朋友可以参考下2018-03-03
这篇文章主要介绍了MySql二进制连接方式详解的相关资料,需要的朋友可以参考下2016-05-05
今天小编就为大家分享一篇关于B-树的插入过程介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01
这篇文章主要介绍了MySQL查询优化的5个实用技巧,从数据类型、字符集、子查询等角度分析了MySQL查询优化的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下2015-12-12
这篇文章主要介绍了mysql误删root用户恢复方法,本文操作是在mysql5.5版本下完成,其它版本仅作参考,需要的朋友可以参考下2015-02-02
下面小编就为大家带来一篇Mysql GTID Mha配置方法。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-03-03
最新评论
mysql gbk_MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题相关推荐
- mysql中gbk编码汉字和英文_MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题...
MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数 ...
- 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- 计算机ucs汉字编码,字符编码基础知识 - Unicode,UCS,GBK,GB2312,UTF-8
字符编码基础知识- Unicode,UCS,GBK,GB2312,UTF-8 最近遇到一个Unicode和UTF-8关系比较的问题,之前在处理中文显示时也遇到过类似的问题,于是花时间学习了一下,在此做 ...
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)--ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换 参考文章: (1)解决Qt中文乱码以及汉字编码的问题(U ...
- mysql中文乱码解决_mysql中文乱码解决方式
近期项目使用到mysql.却突然出现了中文乱码问题.尝试了多种方案,最终解决乱码问题,总结一下解决方式,给遇到同样问题的人一点參考. 中文乱码的原因 1.安装mysqlserver的时候编码集设定有问 ...
- 解决vi中文乱码问题
问题源于SI中编辑的注释,在虚拟机中,用记事本打开的可以显示正常的中文注释,在vi(vim)中编辑却显示乱码: 解决vi中文乱码问题 乱码, 中文, 解决 由于在windows下默认是gb编码,而我的 ...
- 北大青鸟有php,完美解决PHP中文乱码 北大青鸟PHP技术
北大青鸟武汉宏鹏鲁广校区PHP技术之完美解决PHP中文乱码. 用jsp时中文乱码就是一个很棘手的问题,近要开始写项目了,觉得解决中文乱码是和有必要的. 一.先是PHP网页的编码 1. php文件本身的 ...
- suse linux乱码,轻松解决Suse中文乱码问题
随着我们学习Suse linux的深入,我们也面临着很多问题,今天所要讲的是Suse中文乱码问题,Suse linux有很多的知识需要我们了解,以便我们能更好的应用到学习生活中.我研究了一下Suse中 ...
- 解决hibernate中文乱码
解决hibernate中文乱码步骤 1.启动hibernate项目,自动创建表. <property name="hibernate.hbm2ddl.auto">upd ...
最新文章
- libstdc++.so.6: version `GLIBCXX_3.4.21' not found
- WinrRar4.2 扩展名欺骗0Day
- lyGrid列表格式化日期
- php随机生成域名,php生成短域名函数,php生成域名函数
- docker查询mysql 有哪些版本的镜像_运维有话说 | Mysql容器化主主从架构搭建
- 6.2(求一个整数各位数字之和)
- windows各个原版系统下载集锦 MS-DOS Windows 3.1 Windows NT Windows 98等
- 秋季 MacBook Pro 新品都有哪些变化
- mac mini u盘安装系统_U盘重装Mac全新操作系统教程
- 训练集误差和验证集误差
- selenium获取html源代码
- 计算模拟I2C的传输速率
- 技术职称论文查重用什么论文查重软件?
- linux lp命令,lp命令_Linux lp 命令用法详解:打印文件或修改排队的打印任务
- 若依框架,集成flowable工作流
- Hexo Next主题进阶详细教程
- Flex布局实战:支付宝首页
- 黑莓省电模式 for BlackBerry 9900 9930 9850 OS7.1
- ViewPager无限轮播,简单实现
- java-net-php-python-91ssm社会公共常识科普网开题ppt计算机毕业设计程序
热门文章
- 软件工程毕业设计课题(35)基于JAVA毕业设计JAVA社区疫情防控系统毕设作品项目
- 《笨主管手册》(三)
- Android中打招呼
- 7-10 晨阳哥哥lol之推塔 (20 分)
- 考研高数专题复习汇总(1)极限
- 宽带连接错误的处理办法651、691、623、678、645、720、721、718、734、769、619、676、815(留着吧,不用麻烦别人喽)
- HarmonyOS实战—实现随机更换笑话段子
- IPC-7077《微电子组装行业引线键合工艺、材料的要求及可接受性》标准开发技术组招募成员
- VC中怎么输入特殊符号(如平方、立方等下标符号)
- netsh查看wifi密码