1、今天發生了一件有意思的事情,傳輸的數據大於標准定的字段長度了,我把字段長度調大了,把數據傳輸過來了。誰知道,人家的數據不符合標准,要刪除了重新搞,那么你如何將超長的數據刪除呢,或者將超長的數據查詢出來。
答:劇透一下,其實使用char_length()查詢出來的,就可以把這些刪除掉,然后將調大的字段長度調小就行了。備注,我實際操作的字段都是中文字符哈,別再寫教程寫出血案了。
2、先了解一下,Mysql中length()、char_length()的區別。
1)、length():mysql里面的length()函數是一個用來獲取字符串長度的內置函數。
2)、char_length():在mysql內置函數里面查看字符串長度的還有一個函數是char_length()。
3)、這兩個函數的區別是:
a)、length(): 單位是字節,utf8編碼下,一個漢字三個字節,一個數字或字母一個字節。gbk編碼下,一個漢字兩個字節,一個數字或字母一個字節。
b)、char_length():單位為字符,不管漢字還是數字或者是字母都算是一個字符。
3、擴展一下,MySQL5.0.3版本之后varchar類型的變化。
1)、MySQL 5.0.3 之前:0--255字節,如:varchar(20)中的20表示字節數,如果存放utf-8編碼的話只能放6個漢字。varchar(n),這里的n表示字節數。
MySQL 5.0.3 之后:0--65535字節,varchar(20)表示字符數,不管什么編碼,既漢字也能放20個。但最多占65532字節(兩個字節存放長度,小於255字節用1個字節存放長度),varchar(n)這里的n表示字符數,比如varchar(200),不管是英文還是中文都可以存放200個。其他具體區別,可自行網上查詢。
4、length()<>char_length(),可以用來檢驗是否含有中文字符。
utf-8編碼中判定某個字段為全英文,length(字段) = char_length(字段)即可。