- 主题:utf-8 是不是只需要4个字节就可以装下所有的unicode
根据utf-8的编码规则,4个字节可以容纳21比特数据,最多可以到U+1FFFFF,而unicode的平面数目前最多是17个(U+00xxxx ~ U+10xxxx)。
这也是 mysql用utf8mb4的意义,除非存储那些自定义的unicode字符,不然4字节够了
--
修改:zli07 FROM 49.7.47.*
FROM 49.7.47.*
utf8mb4 是因为 mysql 山寨了自己的 utf-8,结果证明是自作聪明,搬起石头砸自己的脚,才有了其实不是 utf-8 的 utf8 和神奇的 utf8mb4
按照现在的定义,为了兼容 utf-16,4字节的确是够了,但理论上还是可以编到6字节的
【 在 zli07 的大作中提到: 】
: 根据utf-8的编码规则,4个字节可以容纳21比特数据,最多可以到U+1FFFFF,而unicode的平面数目前最多是17个(U+00xxxx ~ U+10xxxx)。
: 这也是 mysql用utf8mb4的意义,除非存储那些自定义的unicode字符,不然4字节够了
--
FROM 203.184.25.*
unicode 为了UTF-16已经把码点范围统一限制到 ~U+10FFFF 以内了
所以没错utf-8用4个字节就足够覆盖了
【 在 zli07 的大作中提到: 】
: 根据utf-8的编码规则,4个字节可以容纳21比特数据,最多可以到U+1FFFFF,而unicode的平面数目前最多是17个(U+00xxxx ~ U+10xxxx)。
: 这也是 mysql用utf8mb4的意义,除非存储那些自定义的unicode字符,不然4字节够了
--
FROM 220.200.25.*
嗯。。倒也是,UTF-16真是脑瘫设计出来的,本来UCS2为了性能舍弃扩展性还说得过去,结果UTF-16折腾了半天
最多能存22位数字,扩展性上甚至不如UTF-8,再加上编解码的时候除了位运算还要做一次加减法。。
【 在 cybereagle 的大作中提到: 】
: unicode 为了UTF-16已经把码点范围统一限制到 ~U+10FFFF 以内了
: 所以没错utf-8用4个字节就足够覆盖了
--
FROM 49.7.47.*
为什么不直接在底层用最长4字节的utf8代替呢?本身varchar(X)也是字符数而非字节数啊
【 在 eGust 的大作中提到: 】
: utf8mb4 是因为 mysql 山寨了自己的 utf-8,结果证明是自作聪明,搬起石头砸自己的脚,才有了其实不是 utf-8 的 utf8 和神奇的 utf8mb4
: 按照现在的定义,为了兼容 utf-16,4字节的确是够了,但理论上还是可以编到6字节的
:
--
FROM 27.38.208.*
GB18030才是最好的UNICODE,等中国达成世界领导者地位,应该为GB18030争取到国际标准地位,3字节汉字的UTF-8滚粗。
--
FROM 222.212.168.*