字节字符的关系
  有段时间没有写业务代码了,今天产品有个需求是要求校验名称为6个汉字或者12个字符。印象中⼀个汉字就是⼀个字符,经过了解后,原来前端js中⼀个汉字是两个字符,所以这⾥索性给前端单纯去校验了,我只在数据库存储设置稍⼤点20个字符即可。
  先借⽤⽹上的资料整理下字符字节的关系如下:
① ASCII码中,⼀个英⽂字母(不分⼤⼩写)占⼀个字节的空间,⼀个中⽂汉字占两个字节的空间。⼀个⼆进制数字序列,在计算机中作为⼀个数字单元,⼀般为8位⼆进制数,换算为⼗进制。最⼩值0,最⼤值255。
② UTF-8编码中,⼀个英⽂字符等于⼀个字节,⼀个中⽂(含繁体)等于三个字节。
③ Unicode编码中,⼀个英⽂等于两个字节,⼀个中⽂(含繁体)等于两个字节。
 符号:英⽂标点占⼀个字节,中⽂标点占两个字节。举例:英⽂句号“.”占1个字节的⼤⼩,中⽂句号“。”占2个字节的⼤⼩。
④ UTF-16编码中,⼀个英⽂字母字符或⼀个汉字字符存储都需要2个字节(Unicode扩展区的⼀些汉字存储需要4个字节)。记住我
⑤ UTF-32编码中,世界上任何字符的存储都需要4个字节。
char_length计算的是字符长度,⽽length计算的是字节长度,刚好我使⽤的是utf8,⼀个汉字占3个字节,占⼀个字符。
为什么这是相同的?因为这不是汉字,⼀个字母⼀个字符⼀个字节。
注意:
oracle 中varchar2(10)  既10个字节3个汉字
mysql  中varchar(10) 既10个字符10个汉字