大家在設計資料庫時,碰到 性別、狀態等 這些 值比較固定的列時,資料型別 是如何定義?
通常都是採用 :
1 |
create table `XXX` |
2 |
( |
3 |
........ |
4 |
sex int (1) not null comment '0:男 1:女' , |
5 |
status int (1) not null comment '0:開啟 1:關閉' |
6 |
) |
這種設計嗎 ?
還是?
1 |
create table `XXX` |
2 |
( |
3 |
........ |
4 |
sex enum( '男' , '女' ) not null , |
5 |
status enum( '開啟' , '關閉' ) not null |
6 |
) |
設定成列舉型別 ,也有它的道理,參考:
MySQL效能優化的最佳20+條經驗 第九條 。
轉自:http://www.oschina.net/question/99114_21864
其中comment表示註釋:參考:http://bbs.csdn.net/topics/330026710
另一篇文章用的是enum型別
MySQL的各種複雜欄位解析-enum,char,decimal
1.MySQL中ENUM型別的使用之性別男女設定預設為男:
SQL語句為:
mysql> create table student (id int(11) primary key auto_increment,name varchar(
10) NOT NULL,sex enum('男','女','保密')default '保密')ENGINE=InnoDB;
寫入:
mysql>insert into student (name,sex) value ('張三','男')
注:enum中如果預設是'保密',則括號裡也要有'保密'這項。
phpmyadmin操作如下圖:
2.decimal:定點小數
decimal(p,s);
例如:decimal(2,1),有效長度為2,小數位佔1位。
此時,插入資料“12.3”、“12”等會出現“資料溢位錯誤”的異常;插入“1.23”或“1.2345...”會自動四捨五入成“1.2”;插入“2”會自動補成“2.0”,以確保2位的有效長度,其中包含1位小數。
3.varchar和char:
varchar:字串型,不定長,溢位則擷取掉,不足則不補滿。如:varchar name(10);
char:字串型,定長,溢位則擷取掉,不足則補滿。如:char password(32),多用於密碼md5值長度固定為32位。