在創建表的時候,給字段定義完類型之后,緊接着需要指定字段的長度,比如:varchar(20),biginit(20)等。那么問題來了,varchar代表的是字節長度,還是字符長度呢?
create table test_varchar(a varchar(20)); insert into test_varchar values('蘇三說技術'); select length(a),CHARACTER_LENGTH(a) from test_varchar;
執行后的結果:
我們看到中文的5個字length函數統計后長度為15,代表占用了15個字節,而使用charcter_length函數統計長度是5,代表有5個字符。所以varchar代表的是字符長度,因為有些復雜的字符或者中文,一個字節表示不了,utf8編碼格式的一個中文漢字占用3個字節。不同的數據庫編碼格式,占用不同的字節數對照表如下:
mysql除了varchar和char是代表字符長度之外,其余的類型都是代表字節長度。
int(n) 這個n表示什么意思呢?從一個列子出發:
ZEROFILL表示長度不夠填充0
執行結果:
mysql常用數字類型字段占用字節數對照表:
從表中可以看出bigint實際長度是8個字節,但是我們定義的a顯示4個字節,所以在不滿4個字節時前面填充0。滿了4個字節時,按照實際的長度顯示,比如:123456。但是,需要注意的是,有些mysql客戶端即使滿了4個字節,也可能只顯示4個字節的內容,比如顯示:1234。
所以bigint(4),這里的4表示顯示的長度為4個字節,實際長度還是8個字節。