說明:IDE與數據庫字段字符字符集均為UTF-8,MySQl版本5.7.x,JDK1.8.x
在設計數據庫的時候,我們往往要給字段設置最大長度:如下圖所示,設定name字段最長長度為16,那么在插入數據的時候,最多可以插入多長的數據呢?
先說結論:最長長度即調用java字符串的length方法返回的結果,即數據庫字段的長度單位為 字符
-----------------------------------------------------------------
在String源碼中可以看到,String的length()方法返回的長度是字符
-----------------------------------------------------------------
如果插入數據超過數據庫字段的最大長度,則會拋出“Data too long for column”異常
-----------------------------------------------------------------
我們知道,由於中文的體系很大,中文與英文字符在計算機中的表示方式並不一樣,但是如上圖所示,16個漢字“哈”組成的字符串與15個字母與一個英文符號組成的字符串,其length方法調用返回值均為16,這是因為我們平時用的是字符,而每一個字符后面的字節數是不一定的。一般來說,UTF-8編碼方式下,一個中文字符由3個字節組成;GBK編碼方式下,一個中文字符由2個字節組成;ISO-8859-1編碼方式下,一個中文字符由1個字節組成。由下面的圖片可以推算出其對應關系。
在Web開發過程中,一般由前端檢測數據長度;為了防止前端的檢測被繞過,可以在后端再做一次檢測