BLOB
是一種二進位大型物件,可以容納可變數量的資料。四種 BLOB
類型為 TINYBLOB
、BLOB
、MEDIUMBLOB
和 LONGBLOB
。它們的區別僅在於它們可以容納的值的最大長度。四種 TEXT
類型為 TINYTEXT
、TEXT
、MEDIUMTEXT
和 LONGTEXT
。它們對應於四種 BLOB
類型,並具有相同的最大長度和儲存需求。請參閱 第 13.7 節「資料類型儲存需求」。
BLOB
值被視為二進位字串(位元組字串)。它們具有 binary
字元集和校對,並且比較和排序基於欄位值中位元組的數值。TEXT
值被視為非二進位字串(字元字串)。它們具有 binary
以外的字元集,並且值的排序和比較基於字元集的校對。
如果未啟用嚴格 SQL 模式,並且您將超出欄位最大長度的值指派給 BLOB
或 TEXT
欄位,則該值會被截斷以符合欄位長度,並產生警告。對於非空白字元的截斷,您可以使用嚴格 SQL 模式來導致發生錯誤(而不是警告)並抑制值的插入。請參閱 第 7.1.11 節「伺服器 SQL 模式」。
無論 SQL 模式為何,從要插入 TEXT
欄位的值中截斷多餘的尾隨空格始終會產生警告。
對於 TEXT
和 BLOB
欄位,插入時沒有填補,選取時也不會剝離位元組。
如果為 TEXT
欄位建立索引,則索引條目比較會在結尾處以空格填補。這表示,如果索引需要唯一值,則僅在尾隨空格數量上不同的值會發生重複鍵錯誤。例如,如果表格包含 'a'
,則嘗試儲存 'a '
會導致重複鍵錯誤。對於 BLOB
欄位則不是如此。
在大多數方面,您可以將 BLOB
欄位視為您想要大小的 VARBINARY
欄位。同樣地,您可以將 TEXT
欄位視為 VARCHAR
欄位。BLOB
和 TEXT
在以下方面與 VARBINARY
和 VARCHAR
不同
對於
BLOB
和TEXT
欄位上的索引,您必須指定索引前置長度。對於CHAR
和VARCHAR
,前置長度是可選的。請參閱 第 10.3.5 節「欄位索引」。
如果您將 BINARY
屬性與 TEXT
資料類型搭配使用,則欄位會被指派欄位字元集的二進位 (_bin
) 校對。
LONG
和 LONG VARCHAR
對應到 MEDIUMTEXT
資料類型。這是一個相容性功能。
MySQL Connector/ODBC 將 BLOB
值定義為 LONGVARBINARY
,將 TEXT
值定義為 LONGVARCHAR
。
因為 BLOB
和 TEXT
值可能非常長,因此您在使用它們時可能會遇到一些限制
排序時僅使用欄位的前
max_sort_length
個位元組。max_sort_length
的預設值為 1024。您可以透過在伺服器啟動或執行時增加max_sort_length
的值,使更多位元組在排序或分組中具有重要意義。任何用戶端都可以變更其工作階段max_sort_length
變數的值mysql> SET max_sort_length = 2000; mysql> SELECT id, comment FROM t -> ORDER BY comment;
在查詢的結果中,如果使用暫存表處理
BLOB
或TEXT
欄位的實例,則伺服器會使用磁碟上的表格而不是記憶體中的表格,因為MEMORY
儲存引擎不支援這些資料類型(請參閱 第 10.4.4 節「MySQL 中內部暫存表的使用」)。使用磁碟會產生效能損失,因此僅在真正需要時才在查詢結果中包含BLOB
或TEXT
欄位。例如,避免使用SELECT *
,它會選取所有欄位。BLOB
或TEXT
物件的最大大小由其類型決定,但是您實際可以在用戶端和伺服器之間傳輸的最大值由可用記憶體量和通訊緩衝區的大小決定。您可以透過變更max_allowed_packet
變數的值來變更訊息緩衝區的大小,但是您必須對伺服器和用戶端程式執行此操作。例如,mysql 和 mysqldump 都允許您變更用戶端max_allowed_packet
值。請參閱 第 7.1.1 節「設定伺服器」、第 6.5.1 節「mysql — MySQL 命令列用戶端」和 第 6.5.4 節「mysqldump — 資料庫備份程式」。您可能還想要比較封包大小和您正在儲存的資料物件的大小與儲存需求,請參閱 第 13.7 節「資料類型儲存需求」
每個 BLOB
或 TEXT
值在內部都由單獨配置的物件表示。這與所有其他資料類型相反,其他資料類型的儲存空間在表格開啟時每個欄位配置一次。
在某些情況下,可能需要將二進制資料(例如媒體檔案)儲存在 BLOB
或 TEXT
資料行中。您可能會發現 MySQL 的字串處理函數對於處理這類資料很有用。請參閱第 14.8 節「字串函數和運算子」。為了安全和其他原因,通常最好使用應用程式碼來執行此操作,而不是授予應用程式使用者 FILE
權限。您可以在 MySQL 論壇 (http://forums.mysql.com/) 中討論各種語言和平台的具體細節。
在 mysql 用戶端中,二進制字串會以十六進制表示法顯示,具體取決於 --binary-as-hex
的值。有關該選項的更多資訊,請參閱第 6.5.1 節「mysql — MySQL 命令列用戶端」。