mysql的varchar(N)和int(N)的含義及其與char區別

myownstars發表於2014-11-13
1)varchar與char的區別
Varchar儲存可變長字串,小於255位元組時需要1個額外位元組(大於255需要2個額外位元組)儲存長度,最大長度為65532位元組(所有列總和);
char儲存定長(right padding),讀取時會截斷末尾空格,長度最大為255字元;


2)varchar(30)中30的涵義
最大儲存30個字元;varchar(5)和(200)儲存hello所佔空間一樣,但後者在排序時會消耗更多記憶體,因為order by col採用fixed_length計算col長度(memory引擎也一樣)

Data Type

Storage Required

CHAR(M)

M × w bytes, 0 <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set. SeeSection 14.5.13.6, “Physical Row Structure” for information about CHARdata type storage requirements for InnoDB tables.

BINARY(M)

M bytes, 0 <= M <= 255

VARCHAR(M), VARBINARY(M)

L + 1 bytes if column values require 0 – 255 bytes, L + 2 bytes if values may require more than 255 bytes



For example, a VARCHAR(255) column can hold a string with a maximum length of 255 characters(字元而非位元組). 對於latin1,’abcd’的L為4,儲存需要5個位元組;對於ucs2(雙位元組字元),則需要10個位元組儲存(最大長度為510>255,故需要額外2個位元組)


3)int(20)中20的涵義
20表示最大顯示寬度為20,但仍佔4位元組儲存,儲存範圍不變;
create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a));
create table int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));

select * from int_test;
+------------+
| a          |
+------------+
| 0000000001 |
| 0000000002 |
| 0000000003 |
| 2147483648 |
+------------+

select * from int_test_4;
+------------+
| a          |
+------------+
|       0001 |
|       0002 |
|       0003 |
| 2147483648 |
+------------+

4)為什麼MySQL這樣設計?
對大多數應用沒有意義,只是規定一些工具用來顯示字元的個數;int(1)和int(20)儲存和計算均一樣;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-1330966/,如需轉載,請註明出處,否則將追究法律責任。

相關文章