乱码的前世今生-字符集和比较规则

本文介绍了字符集和比较规则的基本概念,包括ASCII、ISO 8859-1、GB2312、GBK、UTF-8等常见字符集,以及它们的编码方式。重点讨论了MySQL中的字符集支持,如UTF8和UTF8mb4,并详细讲解了服务器、数据库、表和列四个级别的字符集与比较规则设置。同时,阐述了字符集转换可能导致的乱码问题以及MySQL中的字符集转换过程,涉及到的系统变量如character_set_client、character_set_connection和character_set_results的角色。
摘要由CSDN通过智能技术生成

3.1字符集和计较规则简介

        3.1.1 字符集简介

                编码:将字符映射成一个二进制数据

                解码:将二进制映射到字符

                采用1个字节编码一个字符的形式,字符和字节的映射关系如下:

'                a' -> 00000001 (十六进制:0x01)

                'b' -> 00000010 (十六进制:0x02)

                字符集编 码后的二进制表示:

                'bA' -> 0000001000000011 (十六进制:0x0203)

                'baB' -> 000000100000000100000100 (十六进制:0x020104)

                人们抽象出一个字符集的概念来描述某个字符范围的编码规则。

        3.1.2比较规则简介

                3.1.3一些重要的字符集

                        ASCII字符集:共收录128个字符,包括空格、标点符号、数字、大小写字符和一些不可见的字符。所以可以使用一个字节来进行编码

                        ISO 8859-1字符集:共收录256个字符,是在ASCII字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用一个字节进行编码。

                        GB2312字符集:收集了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其它文字符号682个。兼容ASCII字符集,

                                1.如果该字符集在ASCII字符集中,则采用1字节编码

                                2.否则采用2字节编码

                                这种表示一个字符需要的字节数量可能不同的编码方式称为变长编码方式。

                        GBK字符集:GBK字符集只是在收录字符范围上对GB2312字符集做扩充,编码格式上兼容GB2312。

                        UTF-8字符集:收录地球上能想到的所有字符,而且还在不断的扩充。这种字符集兼容ASCII字符集,采用变长编码方式,编码一个字符需要使用1到4个字节

        3.2MySQL中支持的字符集和排序规则

                3.2.1MySQL中的UTF8和UTF8mb4

                        UTF8mb3:阉割过的UTF8字符集,只使用了1~3个字节表示字符

                        UTF8mb4:正宗的UTF8字符集,使用1·4个字节表示字符

                        备注:UTF8是UTF8mb3的别名。如果需要存储一些emoji表情啥的请使用utf8mb4

                3.2.2字符集查询

                        MySQL支持41中字符集,查看字符集的语句:

                        SHOW(CHARACTER SET|CHARSET) [LIKE 匹配的模式];

                        其中 CHARACTER SET 和 CHARSET 是同义词,用任意一个都可以。

                        例:SHOW CHARSET;

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

                                | Charset | Description | Default collation | Maxlen |

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

                                | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |

                                ...

                                | latin1 | cp1252 West European | latin1_swedish_ci | 1 |

                                | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |

                                ...

                                | ascii | US ASCII | ascii_general_ci | 1 |

                                ...

                                | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |

                                ...

                                | gbk | GBK Simplified Chinese |

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值