下面讲讲关于MySQL中GBK字符集和UTF8字符编码的相关操作,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL中GBK字符集和UTF8字符编码的相关操作这篇文章你一定会有所受益。
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的方式读出来就成乱码了
+——————————————-+
对于以上MySQL中GBK字符集和UTF8字符编码的相关操作相关内容,大家还有什么不明白的地方吗?或者想要了解更多相关,可以继续关注我们的行业资讯板块。