【Mysql】mysql字符集怎么选择 mysql字符集选什么

前言

在MySQL中,字符集和排序规则是区分开来的,你可以单独设置字符集和排序规则。

MySQL字符集和排序规则有关联而且还不是必选项,如果字符集和排序规则都不填写,Mysql会做默认处理;或者设置其一,比如设置字符集,会默认设置了与字符集相应的排序规则。

我们建立数据库是总要涉及到字符集和排序规则的选择问题?怎么选择呢,有什么区别呢?

一、字符集?

先说字符,字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

字符集(Character set)是多个字符的集合,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。

字符编码(Character encoding)也称字集码,是把字符集中的字符通过编码成为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。

二、Mysql中的字符集

在MySQL中,常用的几个字符集有UTF8、UTF8MB4、UTF16、UTF32等,那么Unicode与UTF8、UTF8MB4、UTF16、UTF32是什么关系?我们新建数据库时选择哪种字符集呢?

1.Unicode与UTF8、UTF8MB4、UTF16、UTF32关系

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。UTF8、UTF16、UTF32是Unicode码一种实现形式,都是属于Unicode编码。

2.Mysql新建数据库时选择哪种字符集呢?

UTF8和UTF8MB4是常用的两种字符集,至于这两个选用哪个要根据自己业务情况而定。UTF8MB4兼容UTF8,比UTF8能表示更多的字符,Unicode编码区从编码区1-126属于UTF8区,当然UTF8MB4也兼容这个区,126行以下就是UTF8MB4扩充区,所以你要根据自己的业务进行选择,一般情况下UTF8就满足需求,当然如果考虑到以后扩展,比如考虑到以后存储emoji,就选择UTF8MB4,否则只是浪费空间。我建议还是选择UTF8MB4,毕竟对于大部分公司而言空间不是什么大问题。

三、Mysql排序规则

UTF8MB4常用的排序规则:utf8mb4_unicode_ciutf8mb4_general_ciutf8mb4_bin,选用哪种方式呢?先来分析一下:

1、准确性:

(1)utf8mb4_unicode_ci 是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,不区分大小写

(2)utf8mb4_general_ci 没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,不区分大小写

2、性能:

  (1)utf8mb4_general_ci 在比较和排序的时候更快

  (2)utf8mb4_unicode_ci 在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。

  (3)utf8mb4_bin:将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

总而言之,utf8mb4_general_ci 和utf8mb4_unicode_ci 是我们最常使用的排序规则。utf8mb4_unicode_ci 校对速度快,但准确度稍差。utf8_unicode_ci准确度高,但校对速度稍慢,两者都不区分大小写。这两个选哪个视自己情况而定,还是那句话尽可能保持db中的字符集和排序规则的统计。

四、Mysql查询字符集和排序规则常用的命令

功能命令
查看数据库字符集show create database 数据库名
查看数据表全部字段排序规则show full columns from 表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值