Mysql int(n),char(n),varchar(n)中n的含義
Mysql int(n),char(n),varchar(n)n的含義
Tinyint(n):此處的n僅僅與顯示有關,和底層儲存實際佔用空間大小無關
tinyint(1) 這裡的1表示的是 最短顯示一個字元。tinyint(2) 這裡的2表示的是 最短顯示兩個字元,但這裡光設定m是沒有意義,你還需要指定當資料少於長度m時用什麼來填充,比如zerofill(表示有0填充)。設定tinyint(2) zerofill 你插入1時他會顯示01。設定tinyint(4) zerofill 你插入1時他會顯示0001。
tinyint佔一個位元組,有符號的範圍是-128 - 127,無符號的範圍是 從 0 到 255 的整型資料。int佔4個位元組。
int(n)中的n和tinyint(n)中n的含義完全一樣。
char(N)與varchar(N):
char(N)和varchar(N)最大的區別在於儲存需求空間上的區別上,前者為固定長度,儲存需求為N字元長度,如果長度小於n,則用空格補齊
varchar為可變長度(“var”意為“variable”,可變的),儲存需求為實際值的長度+1(如果N>255,則+2)。
char(N)的N取值範圍為255。
mysql> create table t3 (c char(350),v varchar(5));
ERROR 1074 (42000): Column length too big for column 'c' (max = 255); use BLOB or TEXT instead
varchar(N)的N取值範圍邏輯如下:
4.0版本以下,varchar(50),指的是50位元組,如果存放UTF8漢字時,只能存16個(每個中文3位元組)
5.0版本以上,varchar(50),指的是50字元,無論存放的是數字、字母還是UTF8中文(每個中文3位元組),都可以存放50個
N取值範圍為65535,超過了自動轉換為text型別被強轉成text型別
其中N,不管針對char還是varcahr均有最大字元長度不允許超過N的意思,超過部分則會被截掉不要。如將sql mode設定為TRADITIONAL模式,資料超過長度n是無法插入的,會在插入的時候報錯
mysql> set @@sql_mode=TRADITIONAL;
3、varchar(50)和varchar(100)是否一樣?
硬碟儲存需求一樣,記憶體需求不一樣。即對於VARCHAR資料型別來說,硬碟上的儲存空間是根據實際字元長度來分配儲存空間的,而對於記憶體來說,是使用N個字元空間的記憶體塊來儲存值,即varchar(50)佔用50個字元記憶體空間,varchar(100)佔用100個字元記憶體空間。