UTF和Unicode区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UTF和Unicode区别相关的知识,希望对你有一定的参考价值。
参考技术A首先先来捋一捋计算机编码发展史吧。
一些大佬看不下去了,各国这么独立发展,以后咋交流,所以Unicode编码就出现了。这套编码表的编号从0一直算到了100多万。每一个区间都对应着一种语言的编码。目前几乎收纳了全世界大部分的字符。所有的字符都有唯一的编号,这就解决了解码的冲突,于是天下大定!但是, Unicode把大家都归纳进来,却没有为编码的二进制传输和二进制解码做出规定。
那留下问题总要解决,就出现了UTF-32、 UTF-16、 UTF-8.(这里指Unicode的第二个版本)
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。使用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器所以我们看到很多网页的源码上会有类似的信息,表示该网页正是用的UTF-8编码。
总结下来就是: 计算机内存中,统一使用Unicode编码,需要保存或者传输时,转换成UTF8编码。
参考:
计算机中为何不直接使用 UTF-8 编码进行存储而要使用 Unicode 再转换成 UTF-8?
Unicode和UTF-8、UTF-16、UTF-32之间的关系
utf-8和Unicode的区别
utf8_general_ci 和 utf8_unicode_ci 有啥区别? [复制]
【中文标题】utf8_general_ci 和 utf8_unicode_ci 有啥区别? [复制]【英文标题】:What are the differences between utf8_general_ci and utf8_unicode_ci? [duplicate]utf8_general_ci 和 utf8_unicode_ci 有什么区别? [复制] 【发布时间】:2010-11-05 09:45:23 【问题描述】:可能重复:What's the difference between utf8_general_ci and utf8_unicode_ci
我有两个 unicode 选项,看起来很有希望用于 mysql 数据库。
utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive
你能解释一下 utf8_general_ci 和 utf8_unicode_ci 有什么区别吗?在设计数据库时选择其中一个有什么影响?
【问题讨论】:
另见***.com/questions/766809/… 【参考方案1】:utf8_general_ci
是一个非常简单的排序规则——在 Unicode 上,非常糟糕——排序规则,它在一般 Unicode 文本上给出不正确的结果。它的作用是:
这在 Unicode 上无法正常工作,因为它不理解 Unicode 大小写。单独的 Unicode 大小写比具有 ASCII 意识的方法可以处理的要复杂得多。例如:
“ẞ”的小写字母是“ß”,但“ß”的大写字母是“SS”。 有两个小写的希腊 sigma,但只有一个大写的;考虑“Σίσυφος”。 像“ø”这样的字母不会分解为“o”加变音符号,这意味着它不会正确排序。还有许多其他的微妙之处。
utf8_unicode_ci
使用标准 Unicode Collation Algorithm,支持所谓的扩展和连字,例如:
德语字母 ß (U+00DF LETTER SHARP S) 在“ss”附近排序
字母 Œ (U+0152 LATIN CAPITAL LIGATURE OE) 在“OE”附近排序。
utf8_general_ci
不支持扩展/连字,它可以排序
所有这些字母都是单个字符,有时顺序错误。
utf8_unicode_ci
通常对于所有脚本都更准确。
例如,在 Cyrillic 块上:
utf8_unicode_ci
适用于所有这些语言:
俄语、保加利亚语、白俄罗斯语、马其顿语、塞尔维亚语和乌克兰语。
虽然 utf8_general_ci 仅适用于西里尔文的俄语和保加利亚语子集。
白俄罗斯语、马其顿语、塞尔维亚语和乌克兰语中使用的额外字母
排序不好。
utf8_unicode_ci
的代价是它是一个一点位
比utf8_general_ci
慢。但这就是你为正确性付出的代价。要么你可以有一个错误的快速答案,或者一个非常慢的答案是正确的。你的选择。
很难证明给出错误答案是合理的,因此最好假设utf8_general_ci
不存在并始终使用utf8_unicode_ci
。好吧,除非你想得到错误的答案。
来源:http://forums.mysql.com/read.php?103,187048,188748#msg-188748
【讨论】:
语言列表的道具 看起来这个答案是直接从mysql论坛forums.mysql.com/read.php?103,187048,188748#msg-188748复制而来的 复制/粘贴答案时不会阻止您引用原始来源:P 那你为什么要使用utf8_general_ci
而不是utf8_unicode_ci
?
永远不要使用utf8_general_ci
http://***.com/a/766996/570763【参考方案2】:
来自Unicode Character Sets 中的MySQL documentation:
对于任何 Unicode 字符集,使用
_general_ci
排序规则执行的操作比使用_unicode_ci
排序规则执行的操作要快。例如,utf8_general_ci
排序规则的比较比utf8_unicode_ci
的比较更快,但正确性稍差。原因是utf8_unicode_ci
支持扩展等映射;也就是说,当一个字符比较等于其他字符的组合时。例如,在德语和其他一些语言中,“ß
”等于“ss
”。utf8_unicode_ci
还支持缩写和可忽略的字符。utf8_general_ci
是不支持扩展、收缩或可忽略字符的传统排序规则。它只能在字符之间进行一对一的比较。
【讨论】:
以上是关于UTF和Unicode区别的主要内容,如果未能解决你的问题,请参考以下文章
unicode,ansi,utf-8,unicode big endian编码的区别
utf8_general_ci 和 utf8_unicode_ci 有啥区别? [复制]
utf8_general_ci 和 utf8_unicode_ci 有啥区别? [复制]
utf8_general_ci 和 utf8_unicode_ci 有啥区别? [复制]