mysql 乱码专题
Posted fbjtcp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 乱码专题相关的知识,希望对你有一定的参考价值。
二进制编码到 字符的映射就是字符集
最古老的字符集是ascii
看自己的键盘
A-Z
a-z
0-9
不超过127个,所以,美国人在造计算机的时候,就没考虑到还有其他的字符
所以一个字节可以表示256种值,所以
ascii
0-127来表示,只能用到7位
0xxxx xxxx,最高位始终是0
到了中国,常用汉字3000多,生僻汉字不用说。
1个字节不够表示
用2个字节表示,
0000 0000 0000 0000
1111 1111 1111 1111
0-65535种组合,够用
所以出现了GB2312 字符集
【69 197】 69 和197整个理解还是单理解为E
歧义:因为单字节小于127的值,正好是ascii的值,
如果就严格的2字节绑定,理解为中文,
则gb2312不能识别英文
如何兼容ascii,又能双字节表示中文?
ascii 0-127
干脆gb2312完全不占用0-127,
使用组合来自于
【129-255】【129-255】
但是同时,中文的组合数也少了,只能组合10000+,
事实上,gb2312只能容纳6000多字,
所以出现了gbk
gbk还是双字节,如何扩充容量
答:gbk的第二位,不再局限与129-255,<127也能用
碰到>128的,就在往后找一个字节,2个字节绑定为一个中文,继续找
gbk可存放20000+
这就是ANSI,代表本地字符集,在中国是gbk,在日本就是jis。
后来就产生了unicode 代表国际化字符集
用4个字节来编号,unicode的实现方式称为utf8,即将Unicode简化后进行传输
unicode与utf-8的关系就像源文件与压缩文件的关系
uft8占几个字节?
1-6个字节,既然为变长,如何确定字符的边界?
最高位有几个1就表示几位
如何截取utf8(各国语言都有),无乱码?
答:从头开始,取一个字节,通过位运算,计算连续的1个字节,
如为0,则截取1个字节,
如为N, 则截取n个字节
从容量上来看,GB2312<GBK<UTF-8
问:gbk中文经常在java中,被准为utf-8,怎么转的?
答:gbk也是和unicode有对应关系的,
gbk->unicode->utf-8
乱码是怎么形成的?
答:1.解码时与实际编码不一致,即解码时用jis,编码时用gbk,可修复
使编码与解码一致即可解决
2。传输时,编码不一致,导致字节丢失。不可修复
如将utf-8传输成gbk
以上是关于mysql 乱码专题的主要内容,如果未能解决你的问题,请参考以下文章