精华内容
下载资源
问答
  • 一直以来,都不是十分明了MySQL中utf8_unicode_ci和utf8_general_ci这两个排序规则的区别,因此查了下资料记录一下。 ※ utf8_unicode_ci和utf8_general_ci对于中、英文来说基本上没有什么差别,但是如果有用到...

    一直以来,都不是十分明了MySQL中utf8_unicode_ci和utf8_general_ci这两个排序规则的区别,因此查了下资料记录一下。

    utf8_unicode_ci和utf8_general_ci对于中、英文来说基本上没有什么差别,但是如果有用到俄语、法语、德语,就一定要使用utf8_unicode_ci。

    两者的直观对比:

    utf8_general_ci校对速度快,但准确度稍差(一般的开发中忽略不计,还是要以速度为首选),一般就选用这个就可以了。
    utf8_unicode_ci准确度高,但校对速度稍慢。

    然后看数据库的时候,又发现了我对utf8和utf8mb4两者的区别也是不清楚。。。

    MySQL在5.5.3之后增加utf8mb4编码,mb4就是most bytes 4的意思,是用来兼容四字节的unicode。

    自问自答:

    utf8已经能够存下大部分中文汉字,为什么还要使用utf8mb4?

    utf-8编码存储的可能2个字节、3个字节、4个字节的字符,但是在MySQL中,utf8编码只支持3字节的数据,而移动端的表情数据(比如emoj表情)是4个字节的字符。所以直接往采用utf-8编码,如果插入表情数据和不常用的汉字,以及任何新增的 Unicode 字符等数据,数据库都会报错。

    两者的直观对比:

    utf8 空间占用小,一般开发足够。

    utf8mb4会多占用点空间,所以当有类似于存储表情需求的时候,使用这个。

     

     

    展开全文
  • MySQL在5.5.3之后增加了这个utf8mb4编码,mb4就是most bytes 4意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf...

            MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

            既然utf8应付日常使用完全没有问题,那为什么还要使用utf8mb4呢? 低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。到http://blog.csdn.net/leelyliu/article/details/52879685看unicode编码区从1 ~ 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间。  

    那么utf8mb4比utf8多了什么的呢?

    多了emoji编码支持.

    如果实际用途上来看,可以给要用到emoji的库或者说表,设置utf8mb4.

    比如评论要支持emoji可以用到.

    建议普通表使用utf8 如果这个表需要支持emoji就使用utf8mb4

           排序规则选择常用的有utf8_general_ci , utf8_unicode_ci

           utf8_unicode_ci   是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序 , 为了能够处理特殊字符的情况,实现了略微复杂的排序算法。所以  utf8_unicode_ci   的准确性比较好 , 但是性能相对比较低。

           utf8_general_ci  没有实现Unicode排序规则,在遇到某些特殊语言或字符是,排序结果可能不是所期望的。比如Unicode把ß、Œ当成ss和OE来看;而general会把它们当成s、e,再如ÀÁÅåāă各自都与 A 相等。在比较和排序的时候更快 ,所以utf8_general_ci  的准确性较低 , 但是性能比较好。通常情况下 utf8_general_ci的准确性就够我们用的了。

           索引长度,从utf8转utf8mb4,容易引起索引键超长错误,InnoDB有单个索引最大字节数 768 的限制,而字段定义的是能存储的字符数,比如 VARCHAR(200) 代表能够存200个汉字,索引定义是字符集类型最大长度算的,超过768后抛出异常

    展开全文
  • utf-8和Unicode的区别

    2019-08-27 22:17:37
    utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。 众所周知,在盘古开天辟地...

    utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念

    要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。

    • 众所周知,在盘古开天辟地之前,sorry ,走错片场了(⊙o⊙)…在计算机发明的时候 ,由于计算机你只能表示二进制的数据,美帝人民为了交流通信方便,约定了一个编码系统,就是ASCII码,把abc..xyz...ABC...XYZ...!@#...等字符分别和0,1,2,3,4......对应,发现差不多刚好128个数,半个字节的长度,为了防止以后需要为新的符号编码,于是干脆取一个字节,最高位置为0。后七位从0-127分别对每一个符号编码。
      • 于是,计算机每次读取一个字节,然后参照ASCII表把这些编码翻译成字符。美国人民很高兴,拿着自己玩去了.......
    • 后来欧洲人也玩计算机,发现不行啊,还有很多符号(法语,德语)ASCII没办法表示啊,于是欧洲人自己也撸了一套编码,一个字节的长度,把最高位也用掉了。这套编码叫ISO。

      • 和ASCII表类似,计算机也是每次只读一个字节,然后按照ISO表,解码出字符。于是欧洲人民也很高兴。
    • 中国人不高兴了,特么我们汉字有几万个,常用的就有几千个,没有两个字节根本交不了货。于是勤劳勇敢的中国人民就破天荒的用了两个字节来表示中文。整出一套GBK。为了现实我中华民族兼容并蓄,我们兼容了ASCII编码。

      • gbk编码规定,计算机不能在每次都只读一个字节那么死板了,你要先看看第一位是不是为0,要是为0 的话,就当作ASCII码来读入一个字节,不然的话就读入两个字节。
      • 计算机 : WTF ?? !!

    于是天下就很乱了,欧洲人看不懂我们发过去的信息,我们也看不懂他们的东西,美国人看不懂我的东西,不过我们能看懂他们的信息。。。哈哈。

    总之,天下大乱,群雄并起,百姓生灵涂........

    这个时候,就有个国际组织站出来了,说,这么着吧,我来撸一套编码,把大家的编码都归纳进来。于是unicode编码就出现了。这套编码表的编号从0一直算到了100多万(三个字节)。每一个区间都对应着一种语言的编码。目前几乎收纳了全世界大部分的字符。所有的字符都有唯一的编号,这就解决了解码的冲突,于是天下大定!但是,unicode把大家都归纳进来,却没有为编码的二进制传输和二进制解码做出规定。只留下一句:大哥只能帮你到这里了。

    我知道你一定在想,要个毛的规定啊,每次让计算机读取三个字节然后参照Unicode表解码就好了。想法是好的,但是如果类似于1号编码这样的小数据编号也要三个字节的话,那么也就是0x000001,这简直就是浪费啊,明明一个字节就可以表示了,你非得整三个,所以你到底是几个意思呢?

    不管怎么样,大哥虽然走了,但是问题还得解决啊,于是,就出现了如下解决方案:uft-8,utf-16,utf-32这些编码方案。utf-16是用两个字节来编码所有的字符,utf-32则选择用4个字节来编码。下面只讲一下utf-8这种解决方案,因为它用的最多,用得最多是因为在当时它的方案最好,最节省资源。

    • utf-8

    utf-8为了节省资源,采用变长编码,编码长度从1个字节到6个字节不等

    utf-8.png

    • 我知道你想说,明明看起来utf-16更加节省资源,节省空间,正常人都看得出来。但实际上,当时,互联网上绝大部分存在的资源都是英文的,英文在utf-16中也是2个字节,而在utf-8中则是1个字节。在当时,显然是utf-8更加节省资源。现在我们在中文世界里来比较他们,则是utf-16更加节省资源。

    OK,关于unicode和utf-8的区别已经解释完毕了。下面用一个图来巩固一下那些区别

    Unicode与uft-8的结构关系.png

    展开全文
  • UTF-8 Unicode 的区别

    2019-06-27 10:04:00
    utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首相应该讲讲Unicode的来由。 众所周知,在盘古开天辟地...

    utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念

    要想先讲清楚他们的区别,首相应该讲讲Unicode的来由。

    • 众所周知,在盘古开天辟地之前,sorry ,走错片场了(⊙o⊙)…在计算机发明的时候 ,由于计算机你只能表示二进制的数据,美帝人民为了交流通信方便,约定了一个编码系统,就是ASCII码,把abc..xyz...ABC...XYZ...!@#...等字符分别和0,1,2,3,4......对应,发现差不多刚好128个数,半个字节的长度,为了防止以后需要为新的符号编码,于是干脆取一个字节,最高位置为0。后七位从0-127分别对每一个符号编码。
    • 于是,计算机每次读取一个字节,然后参照ASCII表把这些编码翻译成字符。美国人民很高兴,拿着自己玩去了.......
    • 后来欧洲人也玩计算机,发现不行啊,还有很多符号(法语,德语)ASCII没办法表示啊,于是欧洲人自己也撸了一套编码,一个字节的长度,把最高位也用掉了。这套编码叫ISO。
    • 和ASCII表类似,计算机也是每次只读一个字节,然后按照ISO表,解码出字符。于是欧洲人民也很高兴。
    • 中国人不高兴了,特么我们汉字有几万个,常用的就有几千个,没有两个字节根本交不了货。于是勤劳勇敢的中国人民就破天荒的用了两个字节来表示中文。整出一套GBK。为了现实我中华民族兼容并蓄,我们兼容了ASCII编码。
    • gbk编码规定,计算机不能在每次都只读一个字节那么死板了,你要先看看第一位是不是为0,要是为0 的话,就当作ASCII码来读入一个字节,不然的话就读入两个字节。

    于是天下就很乱了,欧洲人看不懂我们发过去的信息,我们也看不懂他们的东西,美国人看不懂我的东西,不过我们能看懂他们的信息。哈哈。

    总之,天下大乱,群雄并起,百姓生灵涂........

    这个时候,就有个国际组织站出来了,说,这么着吧,我来撸一套编码,把大家的编码都归纳进来。于是unicode编码就出现了。这套编码表的编号从0一直算到了100多万(三个字节)。每一个区间都对应着一种语言的编码。目前几乎收纳了全世界大部分的字符。所有的字符都有唯一的编号,这就解决了解码的冲突,于是天下大定!但是,unicode把大家都归纳进来,却没有为编码的二进制传输和二进制解码做出规定。只留下一句:大哥只能帮你到这里了。

    我知道你一定在想,要个毛的规定啊,每次让计算机读取三个字节然后参照Unicode表解码就好了。想法是好的,但是如果如果类似与1号编码这样的小数据编号也要三个字节的话,那么也就是0x000001,这简直就是浪费啊,明明一个字节就可以表示了,你非得整三个,几个意思啊?

    不管怎么样,大哥虽然走了,但是问题还得解决啊,于是,就出现了如下解决方案:uft-8,utf-16,utf-32这些编码方案。utf-16是用两个字节来编码所有的字符,utf-32则选择用4个字节来编码。下面只讲一下utf-8这种解决方案,因为它用的最多,用得最多是因为在当时它的方案最好,最节省资源。

    utf-8为了节省资源,采用变长编码,编码长度从1个字节到6个字节不等

    UTF-8 和 Unicode 的区别

    utf-8.png

    • 我知道你想说,明明看起来utf-16更加节省资源,节省空间,正常人都看得出来。但实际上,当时,互联网上绝大部分存在的资源都是英文的,英文在utf-16中也是2个字节,而在utf-8中则是1个字节。在当时,显然是utf-8更加节省资源。现在我们在中文世界里来比较他们,则是utf-16更加节省资源。

    OK,关于unicode和utf-8的区别已经解释完毕了。下面用一个图来巩固一下那些区别

    UTF-8 和 Unicode 的区别

     

    转载于:https://www.cnblogs.com/CQqf2019/p/11095366.html

    展开全文
  • 辨析 UTF-8和Unicode的区别

    千次阅读 2019-02-04 12:35:55
    辨析 UTF-8和Unicode的区别 2019-02-04 10:56:18 AM 作为一名创客,穿梭在不同而编程语言之间,例如python、JavaScript、PHP(最好的编程语言)、Golang等,免不得遇见中文显示乱码的场景。为此,我也晕过车,翻过...
  • 转贴 utf8unicode的区别

    千次阅读 2007-11-22 01:21:00
    utf8和unicode编码究竟是什么关系?有何区别?2007-09-19 11:43 UTF8 == Unicode Transformation Format -- 8 bit是Unicode传送格式。即把Unicode文件转换成BYTE传送流。UTF8流转换程序:Input: unsigned
  • utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。 众所周知,在盘古开天辟地...
  • utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。 众所周知,在计算机发明的时候 ...
  • utf-8和unicode 的区别

    2015-03-05 12:58:01
    http://zh.wikipedia.org/zh/Unicode
  • UTF8,Unicode 的区别(zt)

    2015-04-07 11:24:20
    UTF8并不算是一种电脑编码,而是一种储存传送格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下比较:   以"I am Chinese"为例  用ANSI储存:12 Bytes  用Unicode/UCS2储存:24 ...
  • utf-8和unicode区别

    2017-04-16 22:35:12
    今天也没学什么炒一下苋饭,写个这之前我看了网上有关...2.UTF-8就是unicode的一种具体实现,它采用变长方式存储字符。 3.英文字符utf-8采用一个字节存储; 4.汉字则采用三个,极少数采用两个字节。 5.简单说,uni
  • utf8_general_ci 不区分大小写,这个你在注册用户名邮箱时候就要使用。 utf8_general_cs 区分大小写,如果用户名邮箱用这个就会照成不良后果。 utf8_bin: compare strings by the binary value of each ...
  • utf8_unicode_ci和utf8_general_ci区别 ... UTF-8 - 维基百科,自由百科全书utf8_unicode_ci和utf8_general_ci区别在数据库系统MySQL中有多种字符集,其中utf8_unicode_ci和utf8_gene...
  • utf8_general_ci、utf8_unicode_ci和utf8_bin的区别 utf8_general_ci 不区分大小写,这个你在注册用户名邮箱的时候就要使用。 utf8_general_cs 区分大小写,如果用户名邮箱用这个就会照成不良后果。 ...
  • 来说就是一句话:utf-8是变长,作为文件存储时用,unicode是定长,将文件读取到内存时用 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊是还有一个编码问题。 因为计算机只能处理数字,...
  • 区别之前,先讲一下这两个编码概念。1.Unicode(统一码、万国码、单一码)是计算机科学领域里一项业界标准,包括字符...Unicode是国际组织制定可以容纳世界上所有文字符号字符编码方案。2.utf-8是一种针对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,732
精华内容 692
关键字:

utf8和unicode的区别