成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL 中 Blob 和 Text 數據類型詳解

數據庫 MySQL
blob(binary large object) 是一個可以存儲二進制文件的容器,主要用于存儲二進制大對象,例如可以存儲圖片,音視頻等文件。

 [[443202]]

前言:

前面文章我們介紹過一些常用數據類型的用法,比如 int、char、varchar 等。一直沒詳細介紹過 blob 及 text 類型,雖然這兩類數據類型不太常用,但在某些場景下還是會用到的。本篇文章將主要介紹 blob 及 text 數據類型的相關知識。

1. blob 類型

blob(binary large object) 是一個可以存儲二進制文件的容器,主要用于存儲二進制大對象,例如可以存儲圖片,音視頻等文件。按照可存儲容量大小不同來分類,blob 類型可分為以下四種:

類型

可存儲大小

用途

TINYBLOB

0 - 255字節

短文本二進制字符串

BLOB

0 - 65KB

二進制字符串

MEDIUMBLOB

0 - 16MB

二進制形式的長文本數據

LONGBLOB

0 - 4GB

二進制形式的極大文本數據

 

其中最常用的就是 blob 字段類型了,最多可存儲 65KB 大小的數據,一般可用于存儲圖標或 logo 圖片。不過數據庫并不適合直接存儲圖片,如果有大量存儲圖片的需求,請使用對象存儲或文件存儲,數據庫中可以存儲圖片路徑來調用。

2. text 類型

text 類型同 char、varchar 類似,都可用于存儲字符串,一般情況下,遇到存儲長文本字符串的需求時可以考慮使用 text 類型。按照可存儲大小區分,text 類型同樣可分為以下四種:

類型

可存儲大小

用途

TINYTEXT

0 - 255字節

一般文本字符串

TEXT

0 - 65 535字節

長文本字符串

MEDIUMTEXT

0 - 16 772 150字節

較大文本數據

LONGTEXT

0 - 4 294 967 295字節

極大文本數據

不過在日常場景中,存儲字符串還是盡量用 varchar ,只有要存儲長文本數據時,可以使用 text 類型。對比 varchar ,text 類型有以下特點:

  • text 類型無須指定長度。
  • 若數據庫未啟用嚴格的 sqlmode ,當插入的值超過 text 列的最大長度時,則該值會被截斷插入并生成警告。
  • text 類型字段不能有默認值。
  • varchar 可直接創建索引,text 字段創建索引要指定前多少個字符。
  • text 類型檢索效率比 varchar 要低。

下面我們來具體測試下 text 類型的使用方法:

  1. # 創建測試表 字符集是 utf8 
  2. mysql> show create table tb_text\G 
  3. *************************** 1. row *************************** 
  4.        Table: tb_text 
  5. Create TableCREATE TABLE `tb_text` ( 
  6.   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵'
  7.   `a` tinytext, 
  8.   `b` text, 
  9.   `c` varchar(255) DEFAULT NULL
  10.   PRIMARY KEY (`id`) 
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 
  12.  
  13. # 創建索引測試 發現text類型必須指定前綴長度 
  14. mysql> alter table tb_text add index idx_a (a); 
  15. ERROR 1170 (42000): BLOB/TEXT column 'a' used in key specification without a key length 
  16. mysql> alter table tb_text add index idx_b (b);  
  17. ERROR 1170 (42000): BLOB/TEXT column 'b' used in key specification without a key length 
  18. mysql> alter table tb_text add index idx_c (c); 
  19. Query OK, 0 rows affected (0.04 sec) 
  20. Records: 0  Duplicates: 0  Warnings: 0 
  21. mysql> alter table tb_text add index idx_b (b(10)); 
  22. Query OK, 0 rows affected (0.06 sec) 
  23. Records: 0  Duplicates: 0  Warnings: 0 
  24.  
  25. # 插入數據測試(repeat函數用于生成重復數據) 
  26. # 正常插入 
  27. mysql> insert into tb_text  (a,b,c) values (repeat('hello',3),repeat('hello',3),repeat('hello',3)); 
  28. Query OK, 1 row affected (0.01 sec) 
  29. # 插入英文字符超標 
  30. mysql> insert into tb_text  (a) values (repeat('hello',52)); 
  31. Query OK, 1 row affected, 1 warning (0.01 sec) 
  32. mysql> show warnings; 
  33. +---------+------+----------------------------------------+ 
  34. Level   | Code | Message                                | 
  35. +---------+------+----------------------------------------+ 
  36. | Warning | 1265 | Data truncated for column 'a' at row 1 | 
  37. +---------+------+----------------------------------------+ 
  38. 1 row in set (0.00 sec) 
  39. # 插入中文超標 
  40. mysql>  insert into tb_text  (a) values (repeat('你好',100)); 
  41. Query OK, 1 row affected, 1 warning (0.02 sec) 
  42. mysql> show warnings; 
  43. +---------+------+----------------------------------------+ 
  44. Level   | Code | Message                                | 
  45. +---------+------+----------------------------------------+ 
  46. | Warning | 1265 | Data truncated for column 'a' at row 1 | 
  47. +---------+------+----------------------------------------+ 
  48. 1 row in set (0.00 sec) 
  49. # 查看數據 發現數據有所截取 tinytext 類型最多存儲255字節數據 
  50. mysql> select * from tb_text; 
  51. +----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+ 
  52. | id | a                                                                                                                                                                                                                                                               | b               | c               | 
  53. +----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+ 
  54. |  1 | hellohellohello                                                                                                                                                                                                                                                 | hellohellohello | hellohellohello | 
  55. |  2 | hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello | NULL            | NULL            | 
  56. |  3 | 你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你                                                                                      | NULL            | NULL            | 
  57. +----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+ 
  58. 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) 多。

總結:

本篇文章介紹了 blob 及 text 字段類型相關知識。雖然數據庫規范中一般不推薦使用 blob 及 text 類型,但由于一些歷史遺留問題或是某些場景下,還是會用到這兩類數據類型的。這篇文章僅當做個記錄了,使用到的時候可以參考下。

責任編輯:武曉燕 來源: MySQL技術
相關推薦

2009-05-11 14:36:56

數據類型建庫策略MySQL

2020-10-26 07:16:10

MySQLSchema數據

2010-08-13 14:58:01

FlexNumber數據類型

2010-10-15 13:28:34

MySql數據類型

2010-05-21 15:33:54

MySQL text

2010-05-24 15:56:53

MySQL數據類型

2024-03-14 11:54:37

C++數據類型

2010-06-04 11:15:23

MySQL自增主鍵

2017-02-27 08:34:09

JavaScript數據引用

2016-08-18 14:13:55

JavaScript基本數據引用數據

2011-08-04 09:56:30

Objective-C 變量 數據類型

2022-06-20 08:26:39

Spring容器類型轉換

2010-07-22 17:57:40

2017-07-10 13:38:07

MySQL數據類型整數類型

2010-10-08 14:45:43

mysql中int

2010-11-08 10:27:58

SQL Server檢

2009-06-18 15:53:37

Hibernate B

2011-05-26 13:54:04

Json

2010-06-13 18:00:56

MySQL數據類型

2010-06-10 10:06:01

MySQL數據類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.天天操 | www国产成人免费观看视频,深夜成人网 | 免费成人在线网站 | 羞羞视频网站免费观看 | 久久精品免费观看 | 国产成人99久久亚洲综合精品 | 正在播放国产精品 | 国产9999精品 | 国产成人在线看 | 色欧美片视频在线观看 | 日韩电影一区 | 日韩中文在线观看 | aaa一区| 91精品国产91久久久久游泳池 | 日韩欧美在线免费观看视频 | 日韩午夜一区二区三区 | 国产精品国产三级国产aⅴ浪潮 | 成人视屏在线观看 | 精品久久久久久久久久久久久久久久久 | 欧美一区二区综合 | 亚洲国产精品日韩av不卡在线 | 日韩在线视频一区二区三区 | 国产高清在线精品一区二区三区 | 亚洲人在线 | 综合自拍 | 影音先锋欧美资源 | 日韩免费一区二区 | 亚洲欧洲一区 | 99亚洲| 成人在线视频网 | 久久久免费电影 | 色综合99 | 亚洲国产精品人人爽夜夜爽 | 在线观看中文字幕 | 午夜精品久久久久久久久久久久久 | 久久久www成人免费无遮挡大片 | 福利一区在线观看 | 精品欧美久久 | 国产精品久久久久久婷婷天堂 | 99re热精品视频 | 国产传媒毛片精品视频第一次 |