MYSQL 字串型別

2021-09-26 04:16:15 字數 4676 閱讀 5788

binary 與 varbinary 型別和char與varchar型別是相似的,只是他們儲存的是二進位制資料,也就是說他們是包含位元組流而不是字元流,他們有二進位制字元的集合和順序,他們的對比,排序是基於位元組的數值進行的

binary與varbinary的最大長度和char與varchar是一樣的,只不過他們是定義位元組長度,而char和varchar對應的是字元長度。

儲存和取出時對尾部空格的處理

char(n)用來儲存非二進位制字串,插入時,對於少於n個字元的會自動在尾部加空格,查詢時,尾部的空格就會被丟棄掉

vachar(n) 用來儲存非二進位制字串,插入時,對於少於n個字元的不填補空格,查詢時,尾部的空格不會被丟棄掉

binary(n)儲存二進位制字串,插入進,少於n個位元組的會自動在尾部加0x00,取出時,所有的位元組都保留,返回定義長度的位元組長度,在比較的時候,所有的位元組都是有效的,並且0x00varbinary在插入不會去填補0x00位元組,查詢的時候也不會丟棄任何位元組,在比較的時候,所有的位元組都是有效的,並且0x00

大小比較時

char與varchar的字元比較中,是忽略大小寫與最後的空格的,如:

mysql> select 'a'='a ' , 'a'='a' , 'a'='a ';

+----------+---------+----------+

| 'a'='a ' | 'a'='a' | 'a'='a ' |

+----------+---------+----------+

| 1 | 1 | 1 |

+----------+---------+----------+

1 row in set (0.00 sec)

而binary及varbinary的位元組比較中,所有的資訊都不會被忽略,如:

mysql> select hex(c), c = 'a', c = 'a\0\0' from t;

+--------+---------+-------------+

| hex(c) | c = 'a' | c = 'a\0\0' |

+--------+---------+-------------+

| 610000 | 0 | 1 |

+--------+---------+-------------+

一、主要差別text與blob的主要差別就是blob儲存二進位制資料,text儲存字元資料。目前幾乎所有部落格內容裡的都不是以二進位制儲存在資料庫的,而是把上傳到伺服器然後正文裡使用

二、型別區別

blob有4種型別:tinyblob、blob、mediumblob和longblob。它們只是可容納值的最大長度不同。

text也有4種型別:tinytext、text、mediumtext和longtext。這些型別同blob型別一樣,有相同的最大長度和儲存需求。

三、字符集

blob列沒有字符集,並且排序和比較基於列值位元組的數值值。text列有乙個字符集,並且根據字符集的校對規則對值進行排序和比較

四、大小寫

在text或blob列的儲存或檢索過程中,不存在大小寫轉換,都一樣!

五、嚴格模式

執行在非嚴格模式時,如果你為blob或text列分配乙個超過該列型別的最大長度的值值,值被擷取以保證適合。如果截掉的字元不是空格,將會產生一條警告。使用嚴格sql模式,會產生錯誤,並且值將被拒絕而不是擷取並給出警告。

六、其它

當儲存或檢索blob和text列的值時不刪除尾部空格。

對於blob和text列的索引,必須指定索引字首的長度。

blob和text列不能有預設值。

當排序時只使用該列的前max_sort_length個位元組。max_sort_length的 預設值是1024。

當你想要使超過max_sort_length的位元組有意義,對含長值的blob或text列使用group by或order by的另一種方式是將列值轉換為固定長度的物件。標準方法是使用substring函式。

blob或text物件的最大大小由其型別確定,但在客戶端和伺服器之間實際可以傳遞的最大值由可用記憶體數量和通訊快取區大小確定。你可以通過更改max_allowed_packet變數的值更改訊息快取區的大小,但必須同時修改伺服器和客戶端程式。

mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,  不同的是set可以取多個值,enum只能取乙個值。

1、enum

單選字串資料型別,適合儲存表單介面中的「單選值」。

設定enum的時候,需要給定「固定的幾個選項」;儲存的時候就只儲存其中的乙個值。

設定enum的格式:

enum("選項1","選項2","選項3",...);

實際上,enum的選項都會對應乙個數字,依次是1,2,3,4,5...,最多有65535個選項

使用的時候,可以使用選項的字串格式,也可以使用對應的數字。

2、set

多選字串資料型別,適合儲存表單介面的「多選值」。

設定set的時候,同樣需要給定「固定的幾個選項」;儲存的時候,可以儲存其中的若干個值。

設定set的格式:

set("選項1","選項2","選項3",...)

同樣的,set的每個選項值也對應乙個數字,依次是1,2,4,8,16...,最多有64個選項

使用的時候,可以使用set選項的字串本身(多個選項用逗號分隔),也可以使用多個選項的數字之和(比如:1+2+4=7)

/* 建立** */

mysql> create table enum_set_table(

-> id int auto_increment primary key,

-> gender enum('m','f'),

-> hobby set('music','movie','swimming','footbal')

-> );

query ok, 0 rows affected (0.01 sec)

/* 乙個enum值,乙個set值,二者均使用選項的字串格式 */

mysql> insert into enum_set_table(id,gender,hobby) values(null,'m','music');

query ok, 1 row affected (0.01 sec)

/* 乙個enum值,多個set值,二者均使用選項的字串格式 */

mysql> insert into enum_set_table(id,gender,hobby) values(null,'f','music,movie,footbal');

query ok, 1 row affected (0.00 sec)

/* 乙個enum值,乙個set值,二者均使用選項的數字格式 */

mysql> insert into enum_set_table(id,gender,hobby) values(null,1,1);

query ok, 1 row affected (0.00 sec)

/* 乙個enum值,多個set值,二者均使用選項的數字格式,其中enum的值 2<=>'f',15=1+2+4+8 <=> 'music,movie,swimming,footbal' */

mysql> insert into enum_set_table(id,gender,hobby) values(null,2,15);

query ok, 1 row affected (0.00 sec)

/* 乙個enum值,多個set值,enum值使用選項的字串格式,set值使用選項的數字格式,7=1+2+4 <=> 'music,movie,swimming' */

mysql> insert into enum_set_table(id,gender,hobby) values(null,'f',7);

query ok, 1 row affected (0.01 sec)

/* 查詢結果 */

mysql> select * from enum_set_table;

+----+--------+------------------------------+

| id | gender | hobby |

+----+--------+------------------------------+

| 1 | m | music |

| 2 | f | music,movie,footbal |

| 3 | m | music |

| 4 | f | music,movie,swimming,footbal |

| 5 | f | music,movie,swimming |

+----+--------+------------------------------+

rows in set (0.00 sec)

asd

mysql字串型別 mysql 字串型別

字串型別 字串型別指char varchar binary varbinary blob text enum和set。該節描述了這些型別如何工作以及如何在查詢中使用這些型別。型別大小用途 char0 255位元組定長字串 varchar0 65535 位元組變長字串 tinyblob0 255位元組...

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位元組之間任...