大家在設計資料庫時,碰到 性別、狀態等 這些 值比較固定的列時,資料型別 是如何定義?

通常都是採用 :

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位。