MySQ字符類型大致可以分成(MySQL 5.0):
CHAR(M):0-255字節
VARCHAR(M):0-65535字節
TINYBLOB、MEDIUMBLOB、BLOB、LONGBLOB(實際長度分別+1,3,2,4)
TINYTEXT、MEDIUMTEXT、TEXT、LONGTEXT(實際長度分別+1,3,2,4)
BINARY(M):0-M字節
VARBINARY(M):實際長度+1
MySQL其他類型大致可以分成(MySQL 5.0):
ENUM(枚舉類型):1~65535個成員 1—2個字節
SET:1--8字節
詳細範圍可以參考幫助手冊
1.CHAR、VARCHAR、XXXTEXT
create table test4(c1 char(7),varchar(7));
insert test4 values(' a ',' a ');
mysql> select length(c1),length(c2),concat(c1,'yes'),concat(c2,'yes')
-> from test4;
+------------+------------+------------------+------------------+
| length(c1) | length(c2) | concat(c1,'yes') | concat(c2,'yes') |
+------------+------------+------------------+------------------+
| 2 | 3 | ayes | a yes |
+------------+------------+------------------+------------------+
可以很明顯看出,char類型和varchar類型的前空格在檢索時不會被省略,但是尾部空格就不一樣了,char類型尾部空格是忽略的,varchar類型則反之;
至於varchar與TEXT是完全一樣的(以前的版本的是和TINYTEXT版本一樣),唯一的區別在於TEXT的上限是確定的,不需要特定區設置一個寬度,但是varchar類型需要自己設定。
2..xxxBLOB BINARY(M) VARBINARY(M):
它們的都是存儲二進制字符串的字段類型。他們與文本的區別是排序是按照二進制編碼進行的,使得排序更加準確。
3.ENUM
mysql> create table test5(en enum('A','B'));
mysql> insert test5 select 'a';
mysql> insert test5 select null;
mysql> select * from test5;
+------+
| en |
+------+
| A |
| NULL |
+------+
mysql> insert test5 select 'c';
mysql> show warnings;
+-------+------+-----------------------------------------+
| Level | Code | Message |
+-------+------+-----------------------------------------+
| Error | 1265 | Data truncated for column 'en' at row 1 |
+-------+------+-----------------------------------------+
在我的5.1測試版本上 插入的值如果有必要,會轉化成大寫;再插入枚舉列表以外的值,出錯;在5.0中,插入枚舉列表以外的值,自動轉化成枚舉列表的第一個值;
4.SET類型
mysql> create table test6(col SET('1','2','3','a','6'));
mysql> insert test6 values('1,2'),('1,2,3,a'),('1,1,2,2,3,3');
mysql> select * from test6;
+---------+
| col |
+---------+
| 1,2 |
| 1,2,3,a |
| 1,2,3 |
+---------+
mysql> insert test6 select 'ak47';
mysql> show warnings;
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Error | 1265 | Data truncated for column 'col' at row 1 |
+-------+------+------------------------------------------+
可以插入任意組合的值,當輸入重複的枚舉值的時候會自動去重;當插入不存在的組合時候,報錯;
參考文獻:深入淺出MySQL(網易)