MySQL TEXT vs BLOB vs CLOB


69

从性能角度和可用性角度来看,这些不同数据类型的区别,优点和缺点是什么?


13
MySQL甚至有CLOB类型吗?
Pacerier

10
实际上TEXT = CLOB。CLOB只是Oracle(或其他数据库)的一种,因为mySQL中使用了TEXT。
рüффп

Answers:


79

TEXT是用于基于文本的输入的数据类型。另一方面,由于BLOB和CLOB具有更大的容量限制(例如4GB),因此它们更适合于数据存储(图像等)。

至于BLOB和CLOB之间的区别,我相信CLOB具有与之相关的字符编码,这意味着它可以很好地适合大量文本。

相对于从TEXT字段中检索数据的速度,BLOB和CLOB数据检索需要很长时间。因此,仅使用所需的内容。


15
根据dev.mysql.com/doc/refman/5.0/en/storage-requirements.html,TEXT和BLOB可以容纳相同数量的数据(64K)。使用LONGTEXT和LONGBLOB可以容纳多达4GB的数据。
弗拉基米尔·潘捷列夫

8
我同意Cyber​​Shadow,但您还必须注意,CLOB类型仅在Oracle中存在,TEXT(带有MEDIUMTEXT和LONGTEXT)与mysql中的CLOB等效。
рüффп

2
另一个重要的事情:如果MySQL处于严格模式,并且您试图插入比列大小长的值,那么如果列的类型为BLOB,则MySQL将引发异常。换句话说,如果该列是TEXT,则该值将被截断。
Nico

JDBC返回类型为Types.VARBINARY,然后如何通过JDBC API将文本与其他varbinary区别开(例如,当我尝试编写通用持久性工具时,我不知道其DDL脚本)?为什么MySQL驱动程序不返回Types.CLOB类型?
杨丹

16

值得一提的是,MySQL 5.0+支持CLOB / BLOB数据类型及其大小,因此您可以根据需要选择合适的数据类型。

http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html

Data Type   Date Type   Storage Required
(CLOB)      (BLOB)

TINYTEXT    TINYBLOB    L + 1 bytes, where L < 2**8  (255)
TEXT        BLOB        L + 2 bytes, where L < 2**16 (64 K)
MEDIUMTEXT  MEDIUMBLOB  L + 3 bytes, where L < 2**24 (16 MB)
LONGTEXT    LONGBLOB    L + 4 bytes, where L < 2**32 (4 GB)

where L stands for the byte length of a string

很好的参考,感谢您的示例。顺便说一句,在MySql 5.7手册中没有提到CLOB
卡马菲瑟(Kamafeather),
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.