gb18030 mysql_字符集GBK,GB2312,GB18030,UNICODE,UTF-8

作者:天一阁图书管理员

最近使用python导数据,从一个latin1的数据库导到另一个latin1的数据库,遇到像“漩偑”这样的字符的时候简直是痛不欲生。怎么导怎么报错,如果忽略转码错误又会出现缺少字符的情况。花了几天时间才完全解决这个问题,至于是怎么解决的需要另写一篇python的文章来解释了。还是先练一下基本功吧......

计算机一开始是只支持ascii码表的。而Latin1在ascii的基础上添加了一些字符,ascii表示的是0-126这个范围。但latin1表示的范围是0x0-0xFF。因此latin1就能表示所有的单字节字符。

计算发展的过程中,有一段时间字符集是没有标准的,不少语言都是自己搞了一套,就像大陆和台湾使用的简繁体一样。那时候在windows上字符是使用DBCS来表示的。DBCS就是双字节字符集,使用双字节来表示字符。

gb2312是1980年定义的规范,可想而知它有多古老了......使用16位来表示字符,收录了6763个汉字,682个字符,在那个时候,它支持的字符是有限的,也不支持繁体,当然也仅用于大陆地区,可能也被新加坡使用。

GBK是微软制定的,1995年用于windows95上,这个也比较古老了......也是16位字符集,收录21003个汉字。扩容了很多了。GBK是向下兼容GB2312的。可以支持简繁体共存。

GB18030是国家规定的标准,时间是2000年,这个算是最新的标准,为了包含少数民族们使用的文字而制定的。GB18030是向下兼容GBK的。32位字符集,收录了27553个汉字。同时收录了藏文、蒙文、维吾尔文等主要的少数民族文字。 而到了这个时候,windows内核统一使用unicode了,不再是以前那种DBCS表示方式了。

因为各个国家或者说民族都自己定义自己的字符集,给操作系统厂商和软件商还有用户带来了很大的困扰。字符集的标准化也开始了。unicode使用4字节来表示一个字符,也就是'a'这个字符也要使用32位来表示。这样的话它在理论上表示世界上所有的字符,而且不会出现冲突。每个字符都有自己独特的位置。

unicode发布以后,迟迟得不到推广,因为它太占存储和内存了。后来硬盘和内存白菜价了以后,才慢慢被接受。而为了解决unicode占位太大的问题,出现了不同的UCS Transformation Format,就是unicode转换格式。utf-8就是其中一种,utf-8是一种可变长的字符表达方式。

Unicode符号范围 | UTF-8编码方式

(十六进制) | (二进制)

—————————————————————–

0000 0000-0000 007F | 0xxxxxxx

0000 0080-0000 07FF | 110xxxxx 10xxxxxx

0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

可见的是,unicode值越大的字符,使用的存储空间就越大。utf-8不是一种字符集,而是一种字符集的转换方式,用来节省空间的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值