MySQL中TEXT與BLOB欄位型別的區別

2021-09-07 01:42:08 字數 2836 閱讀 9835

一、型別。

blob是乙個二進位製大物件,可以容納可變數量的資料。有4種 blob型別:tinyblob、blob、mediumblob和longblob。它們只是可容納值的最大長度不同。 有4種text型別:tinytext、text、mediumtext和longtext。這些對應4種blob型別,有相同的最大長度和儲存需求。

二、型別區別。

blob是乙個二進位製大物件,可以容納可變數量的資料。有4種blob型別:tinyblob、blob、mediumblob和longblob。它們只是可容納值的最大長度不同。

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

三、字符集大小寫。

blob 列被視為二進位制字串(位元組字串)。text列被視為非二進位制字串(字元字串)。blob列沒有字符集,並且排序和比較基於列值位元組的數值值。text列有乙個字符集,並且根據字符集的 校對規則對值進行排序和比較。

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

四、 嚴格模式。

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

五、在大多數方面,可以將blob列視為能夠足夠大的varbinary列。同樣,可以將text列視為varchar列。blob和text在以下幾個方面不同於varbinary和varchar:

·         當儲存或檢索blob和text列的值時不刪除尾部空格。(這與varbinary和varchar列相同)。

請注意比較時將用空格對text進行擴充以適合比較的物件,正如char和varchar。

·         對於blob和text列的索引,必須指定索引字首的長度。對於char和varchar,字首長度是可選的。

·         blob和text列不能有 預設值。

long和long varchar對應mediumtext資料型別。這是為了保證相容性。如果text列型別使用binary屬性,將為列分配列字符集的二元 校對規則。

mysql連線程式/odbc將blob值定義為longvarbinary,將text值定義為longvarchar。

由於blob和text值可能會非常長,使用它們時可能遇到一些約束:

·         當排序時只使用該列的前max_sort_length個位元組。max_sort_length的 預設值是1024;該值可以在啟動d伺服器時使用--max_sort_length選項進行更改。

執行時增加max_sort_length的值可以在排序或組合時使更多的位元組有意義。任何客戶端可以更改其會話max_sort_length變數的值:

mysql>set max_sort_length = 2000;

mysql>select id, comment from tbl_name order by comment;

5.6.25-log(root@localhost)[oa]>select @@max_sort_length;

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

| @@max_sort_length |

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

|              1024 |

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

1 row in set (0.00 sec)

5.6.25-log(root@localhost)[oa]>select @max_sort_length;

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

| @max_sort_length |

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

| null             |

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

1 row in set (0.01 sec)

當你想要使超過max_sort_length的位元組有意義,對含長值的blob或text列使用group by或order by的另一種方式是將列值轉換為固定長度的物件。標準方法是使用substring函式。例如,下面的語句對comment列的2000個位元組進行排序:

mysql>select id, substring(comment,1,2000) from tbl_name  order by substring(comment,1,2000);

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

5.6.25-log(root@localhost)[oa]>select @@max_allowed_packet;

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

| @@max_allowed_packet |

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

|              4194304 |

每個blob或text值分別由內部分配的物件表示。這與其它列型別形成對比,後者是當開啟表時為每1列分配儲存引擎。

MySQL中TEXT與BLOB欄位型別的區別

這篇文章主要介紹了mysql中text與blob欄位型別的區別,本文總結了6大區別,需要的朋友可以參考下 在mysql中有兩個字段型別容易讓人感覺混淆,那就是text與blob,特別是自己寫部落格程式的博主不知道改為自己的部落格正文本段選擇text還是blob型別。下面給出幾點區別 一 主要差別 t...

MySQL中TEXT與BLOB欄位型別的區別

這篇文章主要介紹了mysql中text與blob欄位型別的區別,本文總結了6大區別,需要的朋友可以參考下 在mysql中有兩個字段型別容易讓人感覺混淆,那就是text與blob,特別是自己寫部落格程式的博主不知道改為自己的部落格正文本段選擇text還是blob型別。下面給出幾點區別 一 主要差別 t...

MySQL中TEXT與BLOB欄位型別的區別

在mysql中有兩個字段型別容易讓人感覺混淆,那就是text與blob,特別是自己寫部落格程式的博主不知道改為自己的部落格正文本段選擇text還是blob型別。下面給出幾點區別 一 主要差別 text與blob的主要差別就是blob儲存二進位制資料,text儲存字元資料。目前幾乎所有部落格內容裡的都...