共計 4287 個字符,預計需要花費 11 分鐘才能閱讀完成。
今天丸趣 TV 小編給大家分享一下 MySQL 中 blob 和 text 數據類型怎么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
1. blob 類型
blob(binary large object) 是一個可以存儲二進制文件的容器,主要用于存儲二進制大對象,例如可以存儲圖片,音視頻等文件。按照可存儲容量大小不同來分類,blob 類型可分為以下四種:
其中最常用的就是 blob 字段類型了,最多可存儲 65KB 大小的數據,一般可用于存儲圖標或 logo 圖片。不過數據庫并不適合直接存儲圖片,如果有大量存儲圖片的需求,請使用對象存儲或文件存儲,數據庫中可以存儲圖片路徑來調用。
2. text 類型
text 類型同 char、varchar 類似,都可用于存儲字符串,一般情況下,遇到存儲長文本字符串的需求時可以考慮使用 text 類型。按照可存儲大小區分,text 類型同樣可分為以下四種:
不過在日常場景中,存儲字符串還是盡量用 varchar,只有要存儲長文本數據時,可以使用 text 類型。對比 varchar,text 類型有以下特點:
text 類型無須指定長度。
若數據庫未啟用嚴格的 sqlmode,當插入的值超過 text 列的最大長度時,則該值會被截斷插入并生成警告。
text 類型字段不能有默認值。
varchar 可直接創建索引,text 字段創建索引要指定前多少個字符。
text 類型檢索效率比 varchar 要低。
下面我們來具體測試下 text 類型的使用方法:
# 創建測試表 字符集是 utf8
mysql show create table tb_text\G
*************************** 1. row ***************************
Table: tb_text
Create Table: CREATE TABLE `tb_text` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 主鍵 ,
`a` tinytext,
`b` text,
`c` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
# 創建索引測試 發現 text 類型必須指定前綴長度
mysql alter table tb_text add index idx_a (a);
ERROR 1170 (42000): BLOB/TEXT column a used in key specification without a key length
mysql alter table tb_text add index idx_b (b);
ERROR 1170 (42000): BLOB/TEXT column b used in key specification without a key length
mysql alter table tb_text add index idx_c (c);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql alter table tb_text add index idx_b (b(10));
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 插入數據測試(repeat 函數用于生成重復數據)# 正常插入
mysql insert into tb_text (a,b,c) values (repeat( hello ,3),repeat(hello ,3),repeat(hello ,3));
Query OK, 1 row affected (0.01 sec)
# 插入英文字符超標
mysql insert into tb_text (a) values (repeat( hello ,52));
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column a at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
# 插入中文超標
mysql insert into tb_text (a) values (repeat( 你好 ,100));
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column a at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
# 查看數據 發現數據有所截取 tinytext 類型最多存儲 255 字節數據
mysql select * from tb_text;
+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+
| id | a | b | c |
+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+
| 1 | hellohellohello | hellohellohello | hellohellohello |
| 2 | hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello | NULL| NULL|
| 3 | 你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你 | NULL| NULL|
+----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+
3 rows in set (0.00 sec)
通過以上測試,我們注意到,text 類型可存儲容量是以字節為單位而不是字符。例如 tinytext 最多存儲 255 個字節而不是 255 個字符,在 utf8 字符集下,一個英文字母或數字占用一個字節,而一個中文漢字占用三個字節。也就是說 tinytext 最多存儲 255/3=85 個漢字,text 最多存儲 65535/3=21845 個漢字。而 varchar(M) 中的 M 指的是字符數,一個英文、數字、漢字都是占用一個字符,即 tinytext 可存儲的大小并不比 varchar(255) 多。
以上就是“MySQL 中 blob 和 text 數據類型怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。