MySQL TEXT、BLOB和CLOB的区别

78

这些不同数据类型在性能和可用性方面有哪些区别、优缺点?


16
MySQL 有 CLOB 类型吗? - Pacerier
12
实际上,TEXT = CLOB。CLOB 只是 Oracle(或其他数据库)中的一种类型,就像 mySQL 中使用的 TEXT 一样。 - рüффп
2个回答

86

TEXT是一种用于文本输入的数据类型。另外,你还有BLOB和CLOB,它们更适合于数据存储(如图片等),因为它们具有更大的容量限制(例如4GB)。

至于BLOB和CLOB之间的区别,我认为CLOB带有字符编码,这意味着它非常适合处理大量文本。

BLOB和CLOB数据检索所需的时间相对较长,相对于从TEXT字段检索数据时可以快速检索。因此,只使用你需要的。


15
根据http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html文档,TEXT和BLOB可以存储相同数量的数据(即64K)。使用LONGTEXT和LONGBLOB可以存储多达4GB的数据。 - Vladimir Panteleev
8
我同意CyberShadow的观点,但你也必须注意到CLOB类型只存在于Oracle中,而在MySQL中,TEXT(包括MEDIUMTEXT和LONGTEXT)是CLOB的等效类型。 - рüффп
2
另一个重要的事情是:如果MySQL处于严格模式并且您尝试插入超过列大小的值,则如果列的类型为BLOB,则MySQL将抛出异常。另一方面,如果列为TEXT,则该值将被截断。 - Nico
如果JDBC返回类型为Types.VARBINARY,那么如何通过JDBC API区分文本和其他varbinary(例如,当我尝试编写通用持久性工具时,我不知道它的DDL脚本)?为什么MySQL驱动程序不返回其类型作为Types.CLOB? - Daniel Yang

23
值得一提的是,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接