美文网首页
2018-08-29:utf8_bin、utf8_general

2018-08-29:utf8_bin、utf8_general

作者: 7eb7d7c0c25b | 来源:发表于2018-08-30 10:51 被阅读0次

一、字符集(Character set)

  字符集是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同。

1)特点:

①字符编码方式是用一个或多个字节表示字符集中的一个字符

②每种字符集都有自己特有的编码方式,因此同一个字符,在不同字符集的编码方式下,会产生不同的二进制

2)常见字符集:

ASCII字符集:基于罗马字母表的一套字符集,它采用1个字节的低7位表示字符,高位始终为0。

LATIN1字符集:相对于ASCII字符集做了扩展,仍然使用一个字节表示字符,但启用了高位,扩展了字符集的表示范围。

GBK字符集:支持中文,字符有一字节编码和两字节编码方式。

UTF8字符集:Unicode字符集的一种,是计算机科学领域里的一项业界标准,支持了所有国家的文字字符,utf8采用1-4个字节表示字符。

二、校对规则

校对规则(collation):是在字符集内用于字符比较和排序的一套规则,比如有的规则区分大小写,有的则无视。

三.  utf8_bin、utf8_general_ci与utf8_unicode_ci的区别。

ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的;

bin 是二进制, a 和 A 会别区别对待.

例如你运行: 

                 SELECT * FROM table WHERE txt = 'a';

那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以。

1) utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。

2) utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果。

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

4) utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。

5) utf8_general_ci校对速度快,但准确度稍差。(准确度够用,一般建库选择这个)

6) utf8_unicode_ci准确度高,但校对速度稍慢。

四. utf8_general_ci与utf8_unicode_ci的区别

一般的解说是 utf8_general_ci 速度较快,utf8_unicode_ci 准确性较好 … 但快在哪里,又好在什么地方呢?

首先就其准确性说,这世界上有无数种文字,除了通用的英文使用我们较熟悉的 A-Z 字符外,还有很多种近似的写法用于法文、德文、俄文等等。

光是一个 A 字就有数十种不同表现

为什么不都用同一种 A 呢,几十种多麻烦啊。事实上,它们在所属的文字上都各有意义,可能代表不同的发音,也可能是其他东西。在某些语言上,同一个单词不同发音可能就代表两个意思。

校对规则

utf8_unicode_ci 及 utf8_general_ci 的用途就是对那些看起来不一样的字符进行转换,令我们进行排序比对时更方便准确。

以下面为例,直接看起来是不相等的,但在实际应用上是成立的,这就是 utf8_unicode_ci 及 utf8_general_ci 工作的结果。

Ä = A

Ö = O

Ü = U

utf8_unicode_ci的最主要的特色是支持扩展,将一个特别字符转换成多于一个英文字符即当把一个字母看作其它字母组合相等。以德文中的 s 例:

在 utf8_unicode_ci 下面等式是成立

ß = ss

在 utf8_general_ci 只有这样才成立

ß = s

而 且utf8_unicode_ci 准确性较好还表现在它有更完整的字元对照表上。因为 utf8_unicode_ci 有更完整字符表及转换规则,所以在排序的准确性上也比 utf8_general_ci 高一些。

以上utf8_general_ci 字符表的一部份

utf8_unicode_ci 有更完整的字符表

效能:同样因为 utf8_unicode_ci 的字符表及转换规则更复杂,所以在效能上比 utf8_general_ci 慢。

总结:如果你的应用是德文、俄文等等,或者需要精确处理国际化的内容,请用 utf8_unicode_ci 。否则的话用 utf8_general_ci 就可以了。

备注:虽然说 utf8_unicode_ci 的字集比较完整,但其实还是不全的,所以 MySQL 还提供了很多种其他语言的专用字集,用于特别的本地应用,详细可以看看下面的官网连结

转载自https://www.jb51.net/article/48775.htm

https://www.cnblogs.com/geaozhang/p/6724393.htmlutm_source=itdadao&utm_medium=referral

https://www.cnblogs.com/sunsoftware/p/4604773.html

相关文章

网友评论

      本文标题:2018-08-29:utf8_bin、utf8_general

      本文链接:https://www.haomeiwen.com/subject/wjtkwftx.html