一:什么是字符集

字符集支持多层面:服务器层(server)、数据库层(database)、数据表(table)、字段(column)、连接(connect)、结果集(result)。
1.字符集是一套符号和编码规则,字符串必须有相应的字符集。
2.校验集是这套符号和编码的校验规则,定义字符排序规则,字符串之间比较的规则。
3.非ASCII字符在不同字符集中,其所需的字节数是不一样的。
4.多字节字符间是以字符进行比较,而非以字节为单位比较。
5.个别校验集是二进制的,基于字符对应的数值进行比较。
6.XXX_bin 将字符串中的每一个字符用二进制数据存储,区分大小写。
7.XXX_general_ci 不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
8.XXX_general_cs 区分大小写,   cs为case sensitive的缩写,即大小写敏感。
二:常用字符集介绍
(1):gbk/gb2312
1.gb2312是双字节字符集,不论中、英字符均使用双字节来表示,为了区分中文,将其最高位都设为1.
2.gb2312是gbk的子集,gbk是gb18030的子集。
3.gbk包括中日韩字符的大字符集合。
4.通常使用gbk字符集足够。
5.国际通用性比utf8差,不过utf8占用的数据库比gbk大(三字节字符集)。
6.gbk、gb2312等字符集与utf8之间必须通过unicode编码才能互相转换。
gbk、gb2312 => Unicode => utf8
utf8 => Unicode => gbk、gb2312
(2):utf8
1.8-bit Unicode Tuansformation Format,三字节字符集。
2.是Unicode的一种存储方式,可变长度字符编码,又称万国码。
3.UTF-8使用可变长度字节来存储 Unicode字符,例如ASCII字母继续使用1个字节存储,重音文字、希腊文字或西里尔字母等使用2个字节来存储,而常用的汉字就要使用3个字节。
4.数据库字符集尽量使用UTF8(客户端连接connect)及结果(result)字符集也采用UTF8字符集,最终HTML页面亦是采用UTF8。

http://baike.baidu.com/view/25412.htm

ASCII是7位字符集,但不能覆盖欧洲语言中的特殊字符。
lantin1是7位字符集,但不能覆盖亚洲,非洲语言。
unicode是lantin1的扩展,增加了亚洲、非洲常规语言支持,但仍不支持全部语言,且ASCII用unicode来表示效率不高。
utf8是unicode的扩展。

MySQL 4.x 版本及以前,CHAR(n)表示能存储多少字节数,实际能存储多少字符数和字符集没有关系。
MySQL 4.x 之后的版本,CHAR(n)表示能存储多少字符数,实际能存储多少字符数和字符集有关系。

CHAR(30),UTF-8字符集,最大长度90byte,存储了30个汉字,字节数应该是:90个字节
CHAR(30),UTF-8字符集,最大长度90byte,存储了30个英文,字节数应该是:30个字节
CHAR(30),GBK字符集,最大长度60byte 存储了30个汉字,字节数应该是:60个字节
CHAR(30),GBK字符集,最大长度60byte 存储了30个英文,字节数应该是:30个字节
CHAR(30),LATIN1字符集,最大长度30byte存储了15个汉字,字节数应该是:30个字节
CHAR(30),LATIN1字符集,最大长度30byte存储了30个英文,字节数应该是:30个字节

三:如何转换字符集
latin1转换到utf8
gbk转换到utf8
lantin1转换到gbk
lantin1字符集环境:LANG=en_US.ISO_8859    CRT:default
gbk字符集环境:LANG=en_US.GBK/zh_CN.GBK    CRT:default
utf8字符集环境:LANG=en_US.UTF-8    CRT:utf8

1.latin1 =>utf8
以原来的字符集为latin1为例,升级成为utf8的字符集,原来的表:old_table(default charset=latin1),新表:new_table(defaul charset=utf8)。
第一步:导出旧数据
mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table> old.sql
第二步:转换编码(unix/linux环境下)
iconv -t utf8 -f gb2312 -c old.sql >new.sql
或者去掉-f参数,让iconv自动判断原来的字符集
iconv -t utf-8 -c old.sql >new.sql
在这里,假定原来的数据默认是gb2312编码。
第三步:导入
修改new.sql,在插入/更新语句开始之前,增加一条SQL语句:
SET NAMES utf8; 
mysqldump -hlocalhost -uroot -B my_db < new.sql

2.gbk => utf8
以原来的字符集为gbk为例,升级成为utf8字符集,原来的表old_table(default charset=gbk),新表:new_table(defalut charset=utf8)
第一步:导出旧数据
mysqldump --default-character-set=gbk -hlocalhost -uroot -B my_db --tables old_table> old.sql
第二步:转换编码(unix/linux环境下)
iconv -t utf-8 -c old.sql >new.sql
或者去掉-f参数,让iconv自动判断原来的字符集
iconv -t utf-8 -c old.sql >new.sql
在这里,假定原来的数据默认是gb2312编码。
第三步:导入
修改new.sql,在插入/更新语句开始之前,增加一条SQL语句:
SET NAMES utf8; 
mysqldump -hlocalhost -uroot my_db < new.sql

3.latin1 => gbk 
以原来的字符集为gbk为例,升级成为utf8字符集,原来的表old_table(default charset=latin1),新表:new_table(defalut charset=utf8)
第一步:导出旧数据
mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table> old.sql
第二步:导入(省去了第二步转换编码工作)
修改new.sql,在插入/更新语句开始之前,增加一条SQL语句:
SET NAMES gbk; 
mysqldump -hlocalhost -uroot my_db < new.sql

How to support full Unicode in MySQL databases
https://mathiasbynens.be/notes/mysql-utf8mb4

10分钟学会理解和解决MySQL乱码问题
http://cenalulu.github.io/mysql/mysql-mojibake/

字符集GBK和UTF8的区别说明
http://blog.csdn.net/zzxian/article/details/7330804

mysql使用utf8mb4经验吐血总结
https://mp.weixin.qq.com/s?__biz=MzAwMDU2ODU3MA==&mid=2247484084&idx=1&sn=e3740e1087dc73ffcdc4b56bfeaaaa6d&chksm=9ae7bf21ad9036370e8174995ff73775a0ff8c8a51b9995fc8675a994a768a136d187e2aa76d#rd

转载于:https://www.cnblogs.com/liang545621/p/9400361.html

MySQL字符集小结相关推荐

  1. mysql utf8 czech ci_MySQL字符集小结

    备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL的字符集 前言: 1.字符集和排序规则 说实话我对这两个概念比较模糊,其实可以简单的理解: 字符集(character set ...

  2. 【宋红康 MySQL数据库 】【高级篇】【02】MySQL字符集、比较规则、大小写规范、sql_mode

    持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][02]MySQL字符集.比较规则.大小写规范.sql_mode 默认字符集 MySQL8 MySQL5 修改 ...

  3. 关于mysql字符集及导入导出

    MySQL字符集设置 • 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – characte ...

  4. mysql字符集6_【mysql】6 字符集

    1.基本概念: 字符集:是一套字符与字符编码的集合. 字符:用于显示的抽象符号. 编码:显示符号需要变成二进制数才能存储,将字符转成二进制数,就是字符编码 2.常见的字符集&编码: ascii ...

  5. mysql设置了utf8mb4还是报错_第07期:有关 MySQL 字符集的 SQL 语句

    本篇为理清字符集的续篇(上一篇:第06期:梳理 MySQL 字符集的相关概念),重点讲述字符集涉及到的 sql 语句用法. 一.character introducer翻译过来就是字符引导.也就是针对 ...

  6. 查看mysql字符集及修改表字符集

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  7. mysql5.0修改字符集,查看mysql字符集及修改表结构

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  8. Ubuntu下mysql字符集设置

    Liunx下修改MySQL字符集: 1.查找MySQL的cnf文件的位置 find / -iname '*.cnf' -print /usr/share/mysql/my-innodb-heavy-4 ...

  9. xp mysql字符集与乱码_mysql字符集(GBK、GB2312、UTF8)与中文乱码的原因及解决

    Mysql乱码问题的原因与解决 MySQL对中文的支持程度还是很有限的,尤其是新手,一旦出现乱码问题,就会头大.下面介绍几种乱码问题的现象原因及解决方法,仅供参考. 乱码问题1:用PHPmyAdmin ...

最新文章

  1. Karto的前端实现与解读
  2. css3 @keyframes、transform详解与实例
  3. 在线广告清除之不分页增强版
  4. Jquery Mobile设计Android通讯录第二章
  5. Python基础(10) - 异常
  6. 不同进制数的表示方法
  7. html中怎么获取搜索框中的值,百度API 搜索框,获取相应的地点的uid
  8. uiautomator的坑和AAPT命令方式启动一个应用程序
  9. mupdf java_mupdf库学习
  10. python搭建web服务器_Python搭建简单的web服务器
  11. html的模板引入,rel=import 未来的HTML模板引入方式
  12. 关于变压器的这些小知识
  13. [BZOJ3772]精神污染(主席树+链剖)
  14. 香橙派3LTS部署ROS2阿克曼开源平台
  15. 在 Mac 上多开微信,还能看到朋友撤回的信息:WeChatTweak - 少数派
  16. 最全GNS3使用教程
  17. 解决Laragon的nginx/apache重启后网站配置文件被修改的问题 - This file has been modified by another program - 文件auto.conf
  18. 3842脉宽调制芯片原理
  19. dhcp应该开启还是关闭(dhcp应该开启还是关闭)
  20. oracle crs 4563,重启机器后,节点2无法启动crs,Oracle你生产的RAC为何如此的脆弱,有图有真相。求解...

热门文章

  1. NVIDIA驱动瘫痪再重装的问题
  2. enq: TT - contention等待事件
  3. 网页制作之CSS超级技巧
  4. 【转】Android之apk文件签名——keytool 和 jarsigner
  5. sql server 查询重复的数据
  6. 一些常用算法 练手的的代码
  7. 有用的正则表达式或JS方法
  8. 【python】面向对象类的继承
  9. java 反射 镜子,java反射机制 - 巍巍的个人页面 - OSCHINA - 中文开源技术交流社区...
  10. linux 测试网络端口通不通_【干货】网络中的各种互通与不通