語法
CREATE TABLE Persons
(
PersonID tinyint(5) zerofill,
PersonID int unsigned,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
數值型
數值型分爲整型,浮點型,定型
整型:
name | 佔位(字節) | 最大值(無符號) |
---|---|---|
bigint | 8 | 太大了 |
int | 4 | 4294967295 |
mediumint | 3 | 16777215 |
smallint | 2 | 65535 |
tinyint | 1 | 255 |
注意:默認是有符號的,也就是最小值是負數
一些可選參數:
- unsigned 無符號(全是正數)
- zerofill 填充至多寬,適合用於學號、編碼等固定數字的,可以用 0 填充至固定寬度。默認帶 unsigned,前面的例如 int(5) 代表填充長度爲5
浮點型:
name | 解釋 |
---|---|
float(M,D) | M:精度,總位數 D:標度,小數點後位數 |
double(M,D) | 比 float 範圍更大 |
定點型:
decimal
浮點型與定點型的區別:
浮點型有精度損失,定點型更精確
比如:
creat table t4 (
a float(9,2),
b decimal(9,2)
)
insert into t4(1234567.23, 1234567.23)
得到的結果是:
a:1234567.25
b:1234567.23
所以定點型更精確,因爲定點型小數點前後是用不同的數字存儲的,而 float 就比較複雜,專門有協會定的規則。
字符串
char,varchar,text,blob,enum
name | 意思 | 寬度 | 實際存字符(i<M) | 實際佔空間 | 利用率 |
---|---|---|---|---|---|
char(M) | 定長 | M | i | M | i/M <=100% |
varchar(M) | 變長 | M | i | i字符 + (1-2)字節 | i/(i+1-2) <100% |
註釋:
char(M) 不足 M個字符給字符右側加空格,取出時刪掉空格,這就意味着,如果存的數據右側本身有空格,則取出會丟失,varchar 則不會
varchar(M) 第一個字符會有專門的字符長度說明
舉例:
char(10),最多存 10 個字符,如果存一個字符,還是佔了 10 個字符的空間,但是儘量用 char,尋址快,varchar 比較麻煩
text 一般存大段文本,還有更大的 mediumtext
blob 二進制,其實也是大段文本,但是不會因爲字符集過濾掉而丟失信息,比如:一張圖片有 0xFF 個字節,在 ASCII 字符集認爲非法,會被過濾掉
enum 枚舉
create table t3 (
gender enum ('男', '女')
);
set 集合,和枚舉差不多,可以選其中的多個
時間型
year 年:95/1995
date 日期:1998-12-27
time 時間:13:56:23
datetime日期時間:1998-12-27 13:56:23
timestamp 時間戳:1970-1-1 0:0:0 到當前時間的秒數,一般存註冊時間、發佈時間都用這個,容易計算。