mysql 支援的資料型別很多,選用正確的資料型別至關重要。下面介紹常用的資料型別以及相應的優缺點。
以上資料型別有可選的unsigned 屬性,表示不允許出現負值,但可以使上限提高一倍.例如 smallint unsigned 可儲存範圍為 0 ~ 65535 ,而 smallint 為 -32768 ~ 32757 。此處和c/c++ 中unsigned 語法一致。有無符號型別使用相同的儲存空間,相同的效能。應根據實際情況選用適用型別。
注:mysql 可以為整數指定寬度,但不會限制數值的合法範圍,只是對應一些互動工具顯示字元個數,對於儲存來說int(1) 與int(11) 是一樣的。
create table `test` (
`id` bigint(20) not null,
primary key (`id`),
key `test_id` (`id`)
) engine=innodb default charset=latin1;
此處bigint(20) 仍然為64位儲存空間。例如 decimal(5,2) 表示 :小數點左邊為3個位元組,小數點右邊為2個位元組,小數點佔位乙個位元組。decimal最多允許65個數字。decimal只是一種儲存格式,在實際計算中會轉換為double 型別。
mysql 包含多種字串型別,以下分別對比不同字串優缺點。
varchar 儲存可變長度字串,它相比定長字串更節省空間(比如char),因為它僅使用必要的空間進行儲存(越少的字元占用越少的空間)。
varvhar需要1到2個額外的位元組記錄字串的長度,若列長度<= 255位元組,則用1個位元組表示,若》255 則需要2個位元組。 varchar(10)為11個位元組儲存空間,varchar(1000)為1002個位元組定址空間。
char 儲存固定長度字串,mysql 根據定義字串長度分配足夠的空間。
注:char會截斷末尾的空格,例如以下sql語句中id欄位效果:
mysql> select concat("a",id,"c") from test_char;
+--------------------+
| concat("a",id,"c") |
+--------------------+
| aidc |
+--------------------+
1 row in set (0.00 sec)
mysql> select concat("a",id,"c") from test_varchar;
+--------------------+
| concat("a",id,"c") |
+--------------------+
| aid c |
+--------------------+
1 row in set (0.00 sec)
測試發現:儲存的資料,char資料型別的右側空格儲存的時候被刪除了,但varchar資料型別的右側空格還會保留。相比char與varchar,它們儲存的為二進位制字串,而非常規字串。binary使用 0作為截斷字元,而非空格。
blob與text是為更大的資料而設計的字串。分別採用二進位制和字元方式儲存。
其中blob是smallblob同義詞。text是smalltext同義詞。
與其他型別不同的是,當blob或text值過大時。mysql會使用專門的儲存區域來進行資料存放,此時每個值在行內需要1~4個位元組儲存乙個指標,然後使用專門的儲存區域儲存實際的值。
列舉把一些不重複的字串儲存在乙個集合內。mysql 會在內部將每個值在列表中的位置儲存為整數。比如:性別(男,女,未知),mysql會儲存為性別(0,1,2);
create table my_enum(gender enum('男','女','未知'))charset utf8;
mysql> insert into my_enum values('男');
query ok, 1 row affected (0.00 sec)
mysql> select * from my_enum ;
+------------+
| gender |
+------------+
| 男 |
+------------+
1 row in set (0.01 sec)
mysql> select gender + 0 from my_enum;
+------------+
| gender + 0 |
+------------+
| 1 |
+------------+
注:以上資料實際儲存為整數(gender + 0 ),而不是字串,而列舉中若新增或者刪除字串必須使用alter table。若專案後期可能新增或者改變字串,則不應該使用列舉。mysql 能儲存的時間最小粒度為秒。但是mysql可以使用微妙的粒度進行臨時運算。
注:timestamp 顯示的值依賴於時區,儲存為0的timestamp 顯示為『1969-12-31 19:00:00』,如果在多個時區訪問資料 datetime 與timestamp的行為將會不一致。前者與時區有關係後者保留文字表示的日期和時間。
可以使用bit列儲存1個或者多個true/false值。bit(1)儲存1個位,bit(2)為儲存2個位,最多為64個位。mysql將bit當作字串型別,而非數字型別。,當檢索bit(1)時,結果是包含二進位制0或者1的字串,而非asc碼中的"0"或"1"。
mysql> create table test_bit(t bit(8));
mysql> insert into test_bit values('0');
mysql> select t from test_bit;
+------+
| t |
+------+
| 0 |
+------+
mysql> select t + 0 from test_bit;
+-------+
| t + 0 |
+-------+
| 48 |
+-------+
上例中 使用select t + 0 則轉換出為字元'0'的asc碼值。mysql 實際儲存為二進位制00110000
mysql> create table test_set (col set('a', 'b', 'c', 'd'));
query ok, 0 rows affected (0.04 sec)
mysql> insert into test_set (col) values ('a,d');
query ok, 1 row affected (0.00 sec)
mysql> select col from test_set ;
+------+
| col |
+------+
| a,d |
+------+
1 row in set (0.00 sec)
都看到這個,給個贊唄~~ blob資料型別 mysql資料型別
mysql資料型別,資料型別介紹 資料型別設定 列屬性 資料型別的字符集用法 選擇適當的資料型別2 資料型別介紹 四種主要類別 數值型別 字元型別 時間型別 二進位制型別 資料型別的 abc 要素 brief 簡潔 complete 完整 例 1 列宣告 create table people id...
MySQL資料型別 BLOB和TEXT
blob binary large object 是用來儲存二進位製大資料型別的。根據儲存長度的不同,text型別和blob型別都可細分為4種型別 tinyblob 最大長度為255 2 8 1 位元組的blob列。tinytext 最大長度為255 2 8 1 字元的text列。blob m 最大...
mysql資料型別 TEXT和Blob
text是 以文字方式儲存的,如果儲存英文的話區分大小寫 blob是以二進位制方式儲存的,不區分大小寫。blob儲存的資料只能整體讀出 有4種text型別 tinytext text mediumtext和longtext。這些對應4種blob型別,有相同的最大長度和儲存需求。blob 列被視為二進...