博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL的字符集和字符编码笔记
阅读量:6174 次
发布时间:2019-06-21

本文共 2227 字,大约阅读时间需要 7 分钟。

比较初级,

深入的请参考卢sir的博客:

http://cenalulu.github.io/linux/character-encoding/

http://cenalulu.github.io/mysql/mysql-mojibake/

GBK 和UTF8的实际在系统里面的存放方式:

 

1、GBK:

> SELECT hex(convert('你好' using gbk));

+----------------------------------+

| hex(convert('你好' using gbk))   |

|----------------------------------|

C4E3BAC3                |

+----------------------------------+

 

GBK字符集是按照4个长度来分割的,因此得出对应关系:

你 --> C4E3

好 --> BAC3

 

2、UTF-8:

> SELECT hex(convert('你好' using utf8));

+-----------------------------------+

| hex(convert('你好' using utf8))   |

|-----------------------------------|

E4BDA0E5A5BD           |

+-----------------------------------+

 

UTF8字符集是按照6个长度来分割的,因此得出对应关系:

你 --> E4BDA0

好 --> E5A5BD

 

这样我们就能发现不同的地方了。假如我们用的是UTF-8存进去的"你好"(对应的底层存储为:E4BDA0E5A5BD),但是使用GBK的方式来读取的话,GBK会对E4BDA0E5A5BD按照每4个bit长度切分,最终切分成E4BD A0E5 A5BD 这个样子。

(如下)

> SELECT CONVERT( unhex('E4BDA0E5A5BD') USING GBK);

+-------------------------------------------+

| CONVERT( unhex('E4BDA0E5A5BD') USING GBK) |

+-------------------------------------------+

| 浣犲ソ                                    |   ---> 采用GBK的方式读出来就成乱码了

+-------------------------------------------+

> SELECT hex(convert('浣' using gbk));

+-------------------------------+

| hex(convert('浣' using gbk)) |

+-------------------------------+

| E4BD                         |

+-------------------------------+

> SELECT hex(convert('犲' using gbk));

+-------------------------------+

| hex(convert('犲' using gbk)) |

+-------------------------------+

| A0E5                         |

+-------------------------------+

> SELECT hex(convert('ソ' using gbk));

+-------------------------------+

| hex(convert('ソ' using gbk)) |

+-------------------------------+

| A5BD                         |

+-------------------------------+

 


 

补充,将16进制的编码反推成UTF8编码的汉字:

> SELECT CONVERT( unhex('E4BDA0E5A5BD') USING utf8);

+--------------------------------------------+

| CONVERT( unhex('E4BDA0E5A5BD') USING utf8) |

+--------------------------------------------+

| 你好                                       |

+--------------------------------------------+


> SELECT CONVERT( unhex('E4BDA0E5A5BD') USING GBK);

+-------------------------------------------+

| CONVERT( unhex('E4BDA0E5A5BD') USING GBK) |

+-------------------------------------------+

| 浣犲ソ                                    |   ---> 采用GBK的方式读出来就成乱码了

+-------------------------------------------+

本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1928024,如需转载请自行联系原作者
你可能感兴趣的文章
一不小心把win10的秘钥卸载了解决方法
查看>>
Linux实现删除撤回的方法。
查看>>
SilverLight之向后台请求数据-WebClient
查看>>
HDU Problem 1260 Tickets 【dp】
查看>>
STL map容器常用API
查看>>
队列的顺序存储---顺序队列
查看>>
Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示
查看>>
第三天
查看>>
connector for python
查看>>
等价类划分的应用
查看>>
Web Service(下)
查看>>
trigger()
查看>>
nvm 怎么安装 ?
查看>>
iOS 调用系统相册拍照时显示英文问题
查看>>
SQL语句写到累了?试试GreenDAO
查看>>
将 CheckboxGroup 和 Checkbox 组件集成在 Form 里完成一个数据校验的示例
查看>>
NSFetchRequest
查看>>
移动端配适与掌握动态 REM
查看>>
用Node.js爬取动态网页,这可能是最简洁的方式
查看>>
人月神话阅读笔记2
查看>>