假如我输入年薪30K以上这个用 length 属性判断后长度是 7我的数据库编码是utf8mb4,一个汉字的长度相当于4但是如果这个字段存入数据库后相当于19加入我输入了【年薪30K以上】这个内容,我应该如何用js才能计算出他的长度是19
2 回答
![?](http://img1.sycdn.imooc.com/5333a0350001692e02200220-100-100.jpg)
繁花如伊
TA贡献2012条经验 获得超12个赞
utf8是变长编码的字符存储方式,utf8mb4只是每个字符最大长度占4字节,而非任一字符都占4字节。
原本MySQL的utf8只能储存基本多语言平面(BMP)上的字符。utf8mb4编码之下,BMP上的字符和utf8编码完全相同,常用汉字仍然只占3个字节,真正占用四个字节的字符常见的只有姓名生辟字和表情符号。
在MySQL数据库中varchar
字段的长度是按字符来描述的,而不是字节,所以“年薪30K以上”用varchar(7)
的字段就可以存得下。
你可以自己试试:
CREATE TEMPORARY TABLE `test` (txt VARCHAR(7) NOT NULL) CHARSET='utf8mb4';INSERT INTO `test` VALUES ('年薪30K以上');
然而下面这个却保存不下:
INSERT INTO `test` VALUES ('12345678'); ERROR 1406 (22001): Data too long for column 'txt' at row 1
至于计算文本的utf8mb4编码字符串的字节长度,可以按字符编码范围来判断,根据RFC-3629
的规范:
从
U+0000
到U+007F
占一个字节从
U+0080
到U+07FF
占两个字节从
U+0800
到U+FFFF
占三个字节从
U+10000
到U+10FFFF
占四个字节
添加回答
举报
0/150
提交
取消