【MySQL資料型別3之--字元型別】

feixianxxx發表於2010-05-14

MySQ字元型別大致可以分成(MySQL 5.0)

CHAR(M)0-255位元組

VARCHAR(M)0-65535位元組

TINYBLOBMEDIUMBLOBBLOBLONGBLOB(實際長度分別+1,3,2,4)

TINYTEXTMEDIUMTEXTTEXTLONGTEXT(實際長度分別+1,3,2,4)

BINARY(M):0-M位元組

VARBINARY(M):實際長度+1

 

MySQL其他型別大致可以分成(MySQL 5.0)

ENUM(列舉型別):1~65535個成員 12個位元組

SET1--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型別則反之;

至於varcharTEXT是完全一樣的(以前的版本的是和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(網易)

                                 

相關文章