MariaDB中的MEDIUMTEXT和MEDIUMBLOB有什么区别?

时间:2019-06-22 20:49:46

标签: text mariadb blob mediawiki

我刚刚看到MediaWiki对MEDIUMBLOB使用text.old_text。查看文档,MEDIUMBLOBMEDIUMTEXT看起来几乎完全相同:

  

BLOB列,最大长度为16,777,215(2 ^ 24-1)个字节。每个MEDIUMBLOB值都使用一个三字节长的前缀存储,该前缀指示该值中的字节数。

  

一个TEXT列,最大长度为16,777,215(2 ^ 24-1)个字符。如果该值包含多字节字符,则有效最大长度会更少。每个MEDIUMTEXT值都使用三字节长度的前缀存储,该前缀指示值中的字节数。

我的猜测是BLOB列在排序方面的行为不同,但除此之外它们的行为完全相同。

所以问题是:为什么MediaWiki然后使用BLOB而不是文本?是否还有其他区别,例如进行备份?

1 个答案:

答案 0 :(得分:1)

BLOB列(小,中,长)包含提供的字节。

TEXT列也可以这样做,但是它具有CHARACTER SET,因此它可以在INSERT期间转换和/或检查字符的有效性。

如果客户端中的编码与表中列的声明不同,则将转换编码。参见SET NAMES。典型的编码为latin1utf8mb4

在读取(SELECT之后,执行反向转码。

但是,如果客户端有latin1字节,并且连接错误地声称客户端已编码为utf8mb4(UTF-8),那么就会发生以下几种不良情况:Mojibake(乱码),截断,问号等

我怀疑old_text被声明为MEDIUMBLOB,以避免出现字符集问题。缺点是不知道如何显示old_text。

排序和比较(例如与=)也有所不同。 BLOB只是查看这些位。根据所选择的TEXTCOLLATION可以进行大小写折叠,特定于区域的等效操作。