mysql(字符集篇)

字符集的分类:
    GBK(中国制造)
    Unicode(世界通用)

字符编码:将字符集上的字符存储在计算机内的一种编码规则
    GBK字符集编码:GBK本身及时字符集也是编码规则,1个汉字=2个字节
    UTF-8:存储在Unicode字符集的一种编码规则,使用1、2、3、4个字节存储,1个汉字=3个字节
    UTF-8mb4:MySQL在 5.5.3 之后增加了utf8mb4 字符编码,mb4即 most bytes 4,简单说utf8mb4是utf8的超集并完全兼容utf8,能够用4个字节存储更多的字符,特点,能够存储Emoji 表情和一些不常用的汉字,以及任何新增的 Unicode 字符等.
    UTF-16:存储在Unicode字符集的一种编码规则,比起UTF-8,好处在于大部分字符都以固定长度的字节(2字节)储存

排序规则:是指对指定字符集下不同字符的比较规则,例:是否区分大小写、是否区分全角和半角等
    utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用
    utf8_general_cs 区分大小写,如果用户名和邮箱用这个就会造成不良后果
    utf8_bin: 字符串每个字符串用二进制数据编译存储,区分大小写,而且可以存二进制的内容
    utf8_general_ci 校对速度快,但准确度稍差
    utf8_unicode_ci 准确度高,但校对速度稍慢
    


重点介绍utf8mb4对应的排序字符集utf8mb4_ unicode_ ci和utf8mb4_ general_ ci(默认):
    准确性:
        utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各语言间精确排序
        utf8mb4_general_ci没有实现Unicode排序规则,遇到某些特殊语言或字符时可能排序结果非期望的
    性能:
        utf8mb4_general_ci在比较和排序时更快
        utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符情况,实现了略复杂的排序算法

综上:推荐采用 UTF-8mb4 字符编码和 utf8mb4_unicode_ci 排序规则

GBK与utf-8的区别:

gbk编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。

utf-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码。

区别:

utf-8编码包含全世界所有国家需要用的字符,它比较灵活,长度在1-6个字节,utf-8编码格式很强大,支持所有国家的语言,正是因为它的强大,才会导致它占用的空间大小要比gbk大,对于网站打开速度而言,也是有一定影响的

gbk编码主要用中文编码,包含全部中文字符,gbk的长度为2个字节,所以和gbk相比,utf-8会占用更多的数据库储存空间.对于gbk编码格式,虽然它的功能少,仅限于中文字符,但它所占用的空间大小会随着它的功能而减少,打开网页的速度比较块

默认规则:

GBK编码的默认COLLATE为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci

总结:如果你的业务系统有存储emoji表情等特殊字符,就必须选择UTF-8mb4字符集编码.在选择utf8和utf8mb4两种编码时,优先考虑utf8mb4,因为在mysql中的utf8最多只能支持3bytes长度的字符编码,对于一些需要占据4bytes的文字,mysql的utf8就不支持了,要使用utf8mb4才行

相关sql:

select version(); #查看mysql版本

SHOW variables LIKE ‘%char%’; #查看当前字符集

SHOW create database db_name; #查看数据库字符集

SHOW create table t_name; #查看表字符集

SHOW collation; #查询服务器支持的排序规则

create database `数据库名` default character utf8mb4 collate utf8mb4_unicode_ci; #创建数据库字符集为utf8mb4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值