mysql字符集&排序

本文比较了GBK和UTF-8两种字符集在编码范围、方式、兼容性和存储空间上的区别,并指出在不同字符集下的排序策略,如GBK直接按拼音排序,UTF-8则需转码后排序。

1:GBK/UTF-8
(1)字符集范围不同:GBK编码支持中文字符和日韩字符,而UTF-8编码支持全球范围内的字符;

(2)编码方式不同:GBK编码采用双字节编码,每个字符占用2个字节,而UTF-8编码采用变长编码,一个字符的编码长度可为1-4个字节;

(3)兼容性不同:GBK编码在国内应用广泛,但在国际化应用上受到限制,而UTF-8编码具有更好的国际化兼容性;

(4)存储空间大小不同:由于GBK编码每个字符占用2个字节,因此在存储中占用的空间相对较大,而UTF-8编码采用变长编码,可以根据字符的实际长度来分配存储空间,因此在存储中占用的空间相对较小;

总之,GBK编码适用于中文和日韩语言环境,UTF-8编码适用于全球范围内的字符。
2:排序
(1)采用的是GBK字符集,那就可以直接按照拼音排序。因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了),直接在查询语句后面添加ORDER BY name ASC
(2)采用的是utf8字符集,需要在排序的时候对字段进行转码,对应的代码是ORDER BY convert(name using gbk) ASC,同样,查询的结果也是按照汉字拼音的升序排序。

### MySQL字符集排序规则详解 #### 什么是字符集 (Character Set) 字符集定义了一组可以被表示的字符以及这些字符对应的二进制编码。不同的字符集支持不同类型的字符,例如 ASCII 只能表示基本拉丁字母表中的字符,而 UTF8 则可以表示几乎所有的 Unicode 字符[^1]。 #### 什么是排序规则 (Collation) 排序规则是在特定字符集中用于比较字符串的一套规则。它不仅决定字符之间的大小写敏感度、重音符号处理等问题,还会影响查询操作的结果顺序。每种字符集通常都关联有一个或多个默认的排序规则[^2]。 #### 常见字符集及其特点 - **latin1**: 单字节编码,主要用于西欧语言; - **utf8mb3/utf8**: 多字节编码,兼容大部分常见Unicode字符,但不完全支持四字节UTF-8字符(如某些Emoji); - **utf8mb4**: 完整支持所有合法的Unicode字符,包括最新的Emojis和其他特殊符号[^4]. 对于现代应用程序来说,强烈建议使用 `utf8mb4` 来确保能够正确处理各种国际化文本数据。 #### 设置字符集排序规则的方法 可以在创建数据库、表格时指定使用的字符集排序规则: ```sql CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 也可以修改现有对象的属性: ```sql ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 此外,在连接到服务器时还可以通过会话变量临时更改当前客户端所用的字符集设置: ```sql SET NAMES 'utf8mb4'; ``` 以上命令设置了三个重要的系统变量:character_set_client, character_set_results 和 character_set_connection 的值均为 utf8mb4[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值