數字類型:對於整數允許進行顯示寬度的設定,這個設定並不影響其值的實際範圍;對於bit數、浮點、定點小數,m是指其有效數字位元,影響值的範圍。
- serial:bigint unsigned not null auto_increment unique
- serial default value: not null auto_increment unique
- bit[(m:=1:64)] m預設為1
- tinyint[(m)] [unsigned] [zerofill]
- {bool|boolean}:tinyint[1] --實際上 true=1 false=0,在儲存時,任何非0的值都是true(1)
- smallint[(m)] [unsigned] [zerofill]
- mediumint[(m)] [unsigned] [zerofill]
- {int|integer}[(m)] [unsigned] [zerofill]
- bigint[(m)] [unsigned] [zerofill]
- float[(m,d)] [unsigned] [zerofill]:--預設依賴於硬體
- float[(p)]:--為了odbc而提工的類型
- {double [precision]}[(m,d)] [unsigned] [zerofill]:--預設依賴於硬體
- {dec|decimal|numeric|fixed}[(m:=10:65,d:0:30)] [unsigned] [zerofill] m預設為10,d預設為0
日期時間類型
- date :'1000-01-01':'9999-12-31' 顯示: 'YYYY-MM-DD' 輸入:{文字常量|數字}
- datetime :'1000-01-01 00:00:00':'9999-12-31 23:59:59' 顯示: 'YYYY-MM-DD HH:MM:SS' 輸入:{文字常量|數字}
- timestamp :'1970-01-01 00:00:01'UTC:'2038-01-09 03:14:07'UTC 顯示: 'YYYY-MM-DD HH:MM:SS' 輸入:{文字常量|數字}
- timestamp儲存的值是自'1970-01-01 00:00:00'依賴經過的秒數,但它卻無法表示'1970-01-01 00:00:00',因為 他的值為0時有其他的含義表示'0000-00-00 00:00:00'
- timestamp的主要作用就是自動更新現有記錄的insert或update的時間:表裡第一個timestamp列會自動在這兩種操作發生時更新,或者 為他賦值null時。當然你也可以在顯示給他符其他值!
- 通常timestamp列總是作為19位的字串,你可以通過“+0”讓他隱式轉換為bigint值
- time '-838:59:59':'838:59:59' 顯示:'HH:MM:SS' 輸入:{文字常量|數字}
- year[(4|2)]:'1901':'2155' 預設為4位長度,2位長度的範圍為'1970:2069'
文本類型
- 通常文本類型有以下通用特性
- 文本類型的長度是字元長度,不是位元組長度
- 文本類型具有[character set|charset]字元集屬性、[collate]定序屬性、[binary]屬性——該屬性會改變文本類型的資料類型
- ascii 是 character set latin1的簡稱
- unicode 是 character set ucs2的簡稱
- binary 是指定character set 的二進位定序,這將是字串的排序、比較依據字元集的數字值進行
- [national] {character|char}[(m:1:255)] [character set cs_name] [collate c_name] --mysql 允許m=0的char,僅僅是考慮相容部分應用程式而已,他的值只能是null或‘’。char的尾隨空格是否刪除是受pad_char_to_full_length控制的
- nchar 是 national char的簡稱,使用utf8字元集
- [national] {character varying|varchar} [(m:1:65535)] [character set cs_name] [collate c_name] --其最大長度受行大小和其他列、字元集影響的。每個varchar列還額外佔用1-2個位元組寸草其實際長度
- nvchar 是 national varchar的簡稱,使用utf8字元集
- binary(m) --和char類似,只是其儲存的是二進位的串,單位為位元組
- varbinary(m) --和char類似,只是其儲存的是二進位的串,單位為位元組
- tinyblob --最大儲存2^8-1個bytes,另外1個位元組的值儲存實際長度
- tinytext [character set cs_name] [collate c_name] --最大儲存2^8-1個char,另外1個位元組的值儲存實際長度
- blob --最大儲存2^16-1個bytes,另外2個位元組的值儲存實際長度
- text [character set cs_name] [collate c_name] --最大儲存2^16-1個char,另外2個位元組的值儲存實際長度
- mediumblob --最大儲存2^24-1個bytes,另外3個位元組的值儲存實際長度
- mediumtext [character set cs_name] [collate c_name] --最大儲存2^24-1個char,另外4個位元組的值儲存實際長度
- longblob --最大儲存2^32-1個bytes,另外3個位元組的值儲存實際長度
- longtext [character set cs_name] [collate c_name] --最大儲存2^32-1個char,另外4個位元組的值儲存實際長度
- enum ('v1','v2',.....) [character set cs_name] [collate c_name] --最多65535個不同的值,enum字串對象只能具有{列表中的|null|''}中的1個值,其內部已整數表示
- set('v1','v2',.....) [character set cs_name] [collate c_name] --最多64個不同的值,enum字串對象只能具有列表中的的任意個值,其內部已整數表示
資料類型的預設值
- 表列可以通過default關鍵字為列指定預設值
- 預設值鼻必須是常量,例外的是timestamp列:可以指定current_timestamp
- 如果列可以為null 可以顯示指定 default null
- 如果列不可以為null,在insert、replace、update等操作裡。mysql看是否啟用strict sql mode。strict 模式下會出現錯誤;非strict 模式下:
- 數字為0,當數字類型為auto_increment時,為下一個值
- timestamp 為當前的日期時間
- 其他日期時間類型為適當的”零“值
- enum型為第一個值
- 其他字元類型為空白串 ''
字元常量:[_字元集名稱]'字元序列....' [定序名稱] --是可以識別"\"逸出字元的c風格字串
- 雙引號字串表示風格,不推薦。
- 逸出字元是大小寫敏感的。不是逸出字元將不做轉義
- N'字元序列' = n'字元序列' = _utf8'字元序列'
數字常量:還用說嗎!!
十六進位文字常量:
- {X|x}'{[0-9a-fA-F]}*' --標準sql風格
- 0x{[0-9a-fA-F]}* --odbc標準風格
- 注意:十六進位字元常量在數字環境會轉換為bigint型,在文本環境會轉換為character字串
布爾型:true、false --不區分大小寫
二進位文字常量:
- b'{[01]}*' --標準sql風格
- 0b{[01]}* --odbc風格
- 注意:二進位文字常量總是作為二進位字串;要想當作數字使用,必須顯式的cast
NULL:未知或沒有資料的意思,不等於0 或Null 字元串 或 ascii的nul(ascii值為0)
相關知識:
- ansi_quotes設定
- 字元集
- 定序
- hex()、bin()、oct()、cast()函數