mysql字串型別 mysql 字串型別

2021-10-25 14:51:30 字數 3374 閱讀 5621

字串型別

字串型別指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位元組之間任...