字串型別
字串型別指char、varchar、binary、varbinary、blob、text、enum和set。該節描述了這些型別如何工作以及如何在查詢中使用這些型別。型別大小用途
char0-255位元組定長字串
varchar0-65535 位元組變長字串
tinyblob0-255位元組不超過 255 個字元的二進位制字串
tinytext0-255位元組短文本字串
blob0-65 535位元組二進位制形式的長文字資料
text0-65 535位元組長文字資料
mediumblob0-16 777 215位元組二進位制形式的中等長度文字資料
mediumtext0-16 777 215位元組中等長度文字資料
longblob0-4 294 967 295位元組二進位制形式的極大文字資料
longtext0-4 294 967 295位元組極大文字資料
char 和 varchar 型別類似,但它們儲存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在儲存或檢索過程中不進行大小寫轉換。
binary 和 varbinary 類似於 char 和 varchar,不同的是它們包含二進位制字串而不要非二進位制字串。也就是說,它們包含位元組字串而不是字元字串。這說明它們沒有字符集,並且排序和比較基於列值位元組的數值值。
blob 是乙個二進位製大物件,可以容納可變數量的資料。有 4 種 blob 型別:tinyblob、blob、mediumblob 和 longblob。它們區別在於可容納儲存範圍不同。
有 4 種 text 型別:tinytext、text、mediumtext 和 longtext。對應的這 4 種 blob 型別,可儲存的最大長度不同,可根據實際情況選擇。
資料庫例項操作charvarvhar:
mysql> create table t5 (
-> n1 char(10),
-> n2 varchar(10)
query ok, 0 rows affected (0.03 sec)
mysql> insert into t5 values (' hello ',' hello ');
query ok, 1 row affected (0.01 sec)
mysql> select concat('!',n1,'!'),concat('!',n2,'!') from t5;
| concat('!',n1,'!') | concat('!',n2,'!') |
| ! hello! | ! hello ! |
1 row in set (0.00 sec)
char(m), varchar(m)不同之處
char(m)定義的列的長度為固定的,m取值可以為0~255之間,當儲存char值時,在它們的右邊填充空格以達到指定的長度。當檢 索到char值時,尾部的空格被刪除掉。在儲存或檢索過程中不進行大小寫轉換。char儲存定長資料很方便,char欄位上的索引效率級高,比如定義 char(10),那麼不論你儲存的資料是否達到了10個位元組,都要占去10個位元組的空間,不足的自動用空格填充。
varchar(m)定義的列的長度為可變長字串,m取值可以為0~65535之間,(varchar的最大有效長度由最大行大小和使用 的字符集確定。整體最大長度是65,532位元組)。varchar值儲存時只儲存需要的字元數,另加乙個位元組來記錄長度(如果列宣告的長度超過255,則 使用兩個位元組)。varchar值儲存時不進行填充。當值儲存和檢索時尾部的空格仍保留,符合標準sql。varchar儲存變長資料,但儲存效率沒有 char高。如果乙個字段可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 varchar(10)是最合算的。varchar型別的實際長度是它的值的實際長度+1。為什麼」+1″呢?這乙個位元組用於儲存實際使用了多大的長度。 從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。
char和varchar最大的不同就是乙個是固定長度,乙個是可變長度。由於是可變長度,因此實際儲存的時候是實際字串再加上乙個記錄 字串長度的位元組(如果超過255則需要兩個位元組)。如果分配給char或varchar列的值超過列的最大長度,則對值進行裁剪以使其適合。如果被裁掉 的字元不是空格,則會產生一條警告。如果裁剪非空格字元,則會造成錯誤(而不是警告)並通過使用嚴格sql模式禁用值的插入.
字串text例項:
mysql> create table t6 (
-> n1 text
query ok, 0 rows affected (0.02 sec)
mysql> insert into t6 values ("sdasadsadsaaaaadassd")
query ok, 1 row affected (0.01 sec)
mysql> select * from t6;
| n1 |
| sdasadsadsaaaaadassd |
1 row in set (0.00 sec)
注意:與char和varchar不同的是,text不可以有預設值,其最大長度是2的16次方-1。
enum 型別
enum 是乙個字串物件,其值通常選自乙個允許值列表中,該列表在表建立時的列規格說明中被明確地列舉。
在下列某些情況下,值也可以是空串("") 或 null;
如果將乙個無效值插入乙個enum(即,乙個不在允許值列表中的字串),空字串將作為乙個特殊的錯誤值被插入。事實上,這個字串有別於乙個"普通的"空字串,因為這個字串有個數字索引值為 0。稍後有更詳細描述。
如果乙個enum被宣告為null,null也是該列的乙個合法值,並且該列的預設值也將為null。如果乙個enum被宣告為not null,該列的預設值將是該列表所允許值的第乙個成員。
mysql> create table t7 (
-> gender enum ('男','女')
query ok, 0 rows affected (0.01 sec)
mysql> insert into t7 values ('男');
query ok, 1 row affected (0.01 sec)
mysql> insert into t7 values ('女');
query ok, 1 row affected (0.00 sec)
mysql> insert into t7 values ('中');
error 1265 (01000): data truncated for column 'gender' at row 1
mysql> select * from t7;
| gender |
| 男 |
| 女 |
2 rows in set (0.00 sec)
mysql字串型別 MySQL
11.1.3.字串型別概述 在某些情況中,mysql可以將乙個字串列更改為不同於create table或alter table語句中所給出的型別。參見13.1.5.1節,沉寂的列規格變更 mysql 5.1字串資料型別包括部分在mysql 4.1之前的版本中沒有的特性 許多字串資料型別的列定義可以...
mysql 可變字串 MySQL 字串型別
字串型 set enum blob text varchar char。1.char 字元 格式 char m 固定長度 m 表示嚴格限定的長度。char 5 varchar 5 5位元組1位元組 需要乙個位元組,儲存字串的總長度 abc abcde abcdef 超出限制,插入不成功 插入不成功 ...
mysql字串型別
字串型別 utf8字符集 乙個漢字佔3個位元組 gbk字符集 乙個漢字佔2個位元組,乙個字母佔乙個位元組 char和varchar 1 char m m為該字串佔的最大長度,長度為0 255位元組之間任意值,占用固定位元組,查詢時不區分大小寫。2 varchar m 長度為0 65535位元組之間任...