http://my.oschina.net/cart/blog/372633
Mysql varchar的数字计算方法
SELECT char_length('中文');
SELECT length('中文');
个数计算?字节计算?
2字节?3字节?4字节?编码格式决定一切啊!
简单的事情为什么那么复杂?装逼写算法计算数目搞得高大上?其实很简单,只是你不懂原理!
同样1个字符,可以演变出1个字节、2个字节、3个字节、4个字节,试问,你不变的算法如何正确针对可变的编码?
Mysql varchar 1个字符在不同编码下的字节数目是不同的
Mysql varchar的数字意义是:任何编码下都是按照个数计算的
Mysql varchar 到底是字节还是个数?
varchar(10),char(10)
- 可以肯定的是,最多包含10个字符(东西)
- 具体是多少字节,要看字符类型和编码规则而定!
如何解决varchar字符数目长度判断或者限制?
根据上面的,我们可以从计算个数的理论上来限制即可!
a-z,A-Z,0-9,半角标点符号 都是1个(这个大家都知道)
汉字、全角字符、法语、Emoji表情符号。。。等一切都视为1个(聪明的同学已经知道解决方法了)
最终答案:
if(mb_strlen($name, 'UTF-8') > 10){
exit('超过数据库最大长度varchar(10)');
}
var_dump(mb_strlen('a', 'UTF-8'));//1个
var_dump(mb_strlen('A', 'UTF-8'));//1个
var_dump(mb_strlen('8', 'UTF-8'));//1个
var_dump(mb_strlen('我', 'UTF-8'));//1个