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個