/* 資料型別(列型別) */ ------------------
1. 數值型別
-- a. 整型 ----------
型別 位元組 範圍(有符號位)
tinyint 1位元組 -128 ~ 127 無符號位:0 ~ 255
smallint 2位元組 -32768 ~ 32767
mediumint 3位元組 -8388608 ~ 8388607
int 4位元組
bigint 8位元組
int(m) m表示總位數
- 預設存在符號位,unsigned 屬性修改
- 顯示寬度,如果某個數不夠定義欄位時設定的位數,則前面以0補填,zerofill 屬性修改
例:int(5) 插入乙個數'123',補填後為'00123'
- 在滿足要求的情況下,越小越好。
- 1表示bool值真,0表示bool值假。mysql沒有布林型別,通過整型0和1表示。常用tinyint(1)表示布林型。
-- b. 浮點型 ----------
型別 位元組 範圍
float(單精度) 4位元組
double(雙精度) 8位元組
浮點型既支援符號位 unsigned 屬性,也支援顯示寬度 zerofill 屬性。
不同於整型,前後均會補填0.
定義浮點型時,需指定總位數和小數字數。
float(m, d) double(m, d)
m表示總位數,d表示小數字數。
m和d的大小會決定浮點數的範圍。不同於整型的固定範圍。
m既表示總位數(不包括小數點和正負號),也表示顯示寬度(所有顯示符號均包括)。
支援科學計數法表示。
浮點數表示近似值。
-- c. 定點數 ----------
decimal -- 可變長度
decimal(m, d) m也表示總位數,d表示小數字數。
儲存乙個精確的數值,不會發生資料的改變,不同於浮點數的四捨五入。
將浮點數轉換為字串來儲存,每9位數字儲存為4個位元組。
2. 字串型別
-- a. char, varchar ----------
char 定長字串,速度快,但浪費空間
varchar 變長字串,速度慢,但節省空間
m表示能儲存的最大長度,此長度是字元數,非位元組數。
不同的編碼,所占用的空間不同。
char,最多255個字元,與編碼無關。
varchar,最多65535字元,與編碼有關。
一條有效記錄最大不能超過65535個位元組。
utf8 最大為21844個字元,gbk 最大為32766個字元,latin1 最大為65532個字元
varchar 是變長的,需要利用儲存空間儲存 varchar 的長度,如果資料小於255個位元組,則採用乙個位元組來儲存長度,反之需要兩個位元組來儲存。
varchar 的最大有效長度由最大行大小和使用的字符集確定。
最大有效長度是65532位元組,因為在varchar存字串時,第乙個位元組是空的,不存在任何資料,然後還需兩個位元組來存放字串的長度,所以有效長度是64432-1-2=65532位元組。
例:若乙個表定義為 create table tb(c1 int, c2 char(30), c3 varchar(n)) charset=utf8; 問n的最大值是多少? 答:(65535-1-2-4-30*3)/3
-- b. blob, text ----------
blob 二進位制字串(位元組字串)
tinyblob, blob, mediumblob, longblob
text 非二進位制字串(字元字串)
tinytext, text, mediumtext, longtext
text 在定義時,不需要定義長度,也不會計算總長度。
text 型別在定義時,不可給default值
-- c. binary, varbinary ----------
類似於char和varchar,用於儲存二進位制字串,也就是儲存位元組字串而非字元字串。
char, varchar, text 對應 binary, varbinary, blob.
3. 日期時間型別
一般用整型儲存時間戳,因為php可以很方便的將時間戳進行格式化。
datetime 8位元組 日期及時間 1000-01-01 00:00:00 到 9999-12-31 23:59:59
date 3位元組 日期 1000-01-01 到 9999-12-31
timestamp 4位元組 時間戳 19700101000000 到 2038-01-19 03:14:07
time 3位元組 時間 -838:59:59 到 838:59:59
year 1位元組 年份 1901 - 2155
datetime 「yyyy-mm-dd hh:mm:ss」
timestamp 「yy-mm-dd hh:mm:ss」
「yyyymmddhhmmss」
「yymmddhhmmss」
yyyymmddhhmmss
yymmddhhmmss
date 「yyyy-mm-dd」
「yy-mm-dd」
「yyyymmdd」
「yymmdd」
yyyymmdd
yymmdd
time 「hh:mm:ss」
「hhmmss」
hhmmss
year 「yyyy」
「yy」
yyyy
yy4. 列舉和集合
-- 列舉(enum) ----------
enum(val1, val2, val3...)
在已知的值中進行單選。最大數量為65535.
列舉值在儲存時,以2個位元組的整型(smallint)儲存。每個列舉值,按儲存的位置順序,從1開始逐一遞增。
表現為字串型別,儲存卻是整型。
null值的索引是null。
空字串錯誤值的索引值是0。
-- 集合(set) ----------
set(val1, val2, val3...)
create table tab ( gender set('男', '女', '無') );
insert into tab values ('男, 女');
最多可以有64個不同的成員。以bigint儲存,共8個位元組。採取位運算的形式。
當建立表時,set成員值的尾部空格將自動被刪除。
MYSQL資料型別 數值型
1 整數型 建立整型表 create table my int int 1 tinyint int 2 smallint int 3 int int 4 bigint charset utf8 插入資料 insert into my int values 100 100 100 100 有效資料 i...
mysql 整型 字元型 列舉型字段操作
bit m 位欄位型別。m表示每個值的位數,範圍為從1到64。如果m被省略,預設為1。tinyint m unsigned zerofill 很小的整數。帶符號的範圍是 128到127。無符號的範圍是0到255。bool,boolean 是tinyint 1 的同義詞。zero值被視為假。非zero...
通過反射,如何將數值型列舉值賦值給列舉型別的屬性
處理可空列舉型別 原理它是值型別,原始寫法是nullable,泛型可以有多個型別引數,但資料庫的乙個欄位只會有乙個型別,所以判斷第乙個型別引數是否是列舉 if prop.propertytype.isvaluetype prop.propertytype.isgenerictype prop.pro...