1. 程式人生 > 資料庫 >MySQL使用TEXT/BLOB型別的知識點詳解

MySQL使用TEXT/BLOB型別的知識點詳解

一、TEXT和BLOB的區別

TEXT和BLOB家族之間僅有的不同是BLOB型別儲存的是二進位制資料,沒有排序規則或字符集,而TEXT型別有字符集或排序規則。說白了如果要儲存中文則選擇TEXT。

二、預設值問題

Strict Mode下不能設定預設值,否則會報can't have a default value錯:

mysql> create table `test`.`text_blob`( 
 -> `a_text` text DEFAULT ' ',-> `b_blob` blob 
 -> );
ERROR 1101 (42000): BLOB/TEXT column 'a_text' can't have a default value

原因:https://www.jb51.net/article/181667.htm

select @@sql_mode;//檢視模式

trict Mode下有以下限制:

1).不支援對not null欄位插入null值

2).不支援對自增長欄位插入”值,可插入null值

3).不支援 text 欄位有預設值

三、排序

MySQL對TEXT和BLOB列進行排序與其他型別不同:只對每個列的最前max_sort_length位元組而不是整個字串排序。
預設是1024,可以通過配置檔案修改。

mysql> SHOW VARIABLES LIKE 'max_sort_length';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_sort_length | 1024 |
+-----------------+-------+
1 row in set (0.00 sec)

四、建立字首索引

通常最好設定開始的部分字元作為索引,這樣可以大大節約索引空間,從而提高索引效率。

alter table table1 add key (text1(1024));

知識點擴充套件:

MySQL欄位設計規範避免使用TEXT/BLOB資料型別

一、說明

假期有時間可以多去看看一些表的設計,發現了不少問題,老系統上過百的欄位,裡面含有大量的mediumtext,不到500萬的資料量,開發規範中有要求表設計不要超過500萬資料量。查看了表佔用的磁碟空間120G,毫無疑問是大表,當初設計的時候就沒有考慮過設計。一句話上線能用就行,管他呢。

二、MySQL規範

1、單表不要超過500萬條記錄,同時評估單表所佔用磁碟空間不要超過50G,否則考慮優化、分表等。

2、禁用text欄位型別,如果必須的用,也需要單獨設計表。

三、禁用text欄位型別原因

1、效能很差,排序等操作時,就不能使用記憶體臨時表,必須使用磁碟臨時表進行。

2、TEXT或BLOB型別只能使用字首索引,MySQL對索引欄位長度是有限制的。

四、解決辦法

定好規範,嚴格執行(執行很難),一兩個DBA面對幾十上百的業務系統,幾萬個表,上百萬的欄位通過每一個表和欄位人工稽核是不可能完成的,最終還是要靠智慧化的稽核系統!

到此這篇關於MySQL使用TEXT/BLOB型別的知識點詳解的文章就介紹到這了,更多相關MySQL使用TEXT/BLOB型別的幾點注意內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!