mysql 字符串類型

字符串類型

字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。該節描述了這些類型如何工做以及如何在查詢中使用這些類型。mysql

類型 大小 用途
CHAR 0-255字節 定長字符串
VARCHAR 0-65535 字節 變長字符串
TINYBLOB 0-255字節 不超過 255 個字符的二進制字符串
TINYTEXT 0-255字節 短文本字符串
BLOB 0-65 535字節 二進制形式的長文本數據
TEXT 0-65 535字節 長文本數據
MEDIUMBLOB 0-16 777 215字節 二進制形式的中等長度文本數據
MEDIUMTEXT 0-16 777 215字節 中等長度文本數據
LONGBLOB 0-4 294 967 295字節 二進制形式的極大文本數據
LONGTEXT 0-4 294 967 295字節 極大文本數據

CHAR 和 VARCHAR 類型相似,但它們保存和檢索的方式不一樣。它們的最大長度和是否尾部空格被保留等方面也不一樣。在存儲或檢索過程當中不進行大小寫轉換。sql

BINARY 和 VARBINARY 相似於 CHAR 和 VARCHAR,不一樣的是它們包含二進制字符串而不要非二進制字符串。也就是說,它們包含字節字符串而不是字符字符串。這說明它們沒有字符集,而且排序和比較基於列值字節的數值值。數據庫

BLOB 是一個二進制大對象,能夠容納可變數量的數據。有 4 種 BLOB 類型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它們區別在於可容納存儲範圍不一樣。ide

有 4 種 TEXT 類型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。對應的這 4 種 BLOB 類型,可存儲的最大長度不一樣,可根據實際狀況選擇。spa


數據庫實例操做charvarvhar:orm

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 被聲明爲 NULLNULL 也是該列的一個合法值,而且該列的缺省值也將爲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)
相關文章
相關標籤/搜索