使用标题进行搜索返回了 1 个与 Stack Overflow 无关的问题,MySQL 文档中提到最多 65535 个字符;但那是……正常字符还是只有五分之一?我需要弄清楚这一点,以便决定是否尝试将数千条数据放入其中,0A1D2A3B... 分成一个非常宽的列,以便可以读取一次,然后通过 php 对其进行字符串操作,或者将所有这些数据放入行中,每行一个。
我可以想象读取单个列并搜索很长的字符串比将数万行读入数组要快得多,而且我发现在 php 中使用字符串比使用数组更容易。
答案1
MySQL 可以处理 BLOB 中长度为 200 万个字符的字符串吗?
a 的最大大小BLOB
为65535
字节。
但是如果您想存储更大的值,则可以使用MEDIUMBLOB
(16,777,215
字节)或LONGBLOB
(4G
字节)。
笔记:
- 使用 Unicode 字符集时,并非所有字符都使用相同数量的字节,每个字符最多需要三(四)个字节。
然而:
BLOB 或 TEXT 对象的最大大小由其类型决定,但客户端和服务器之间实际可以传输的最大值取决于可用内存的数量和通信缓冲区的大小。
我将在其中输入 UTF-8
utf8字符集在MySQL 5.7中与5.7之前版本相同,具有完全相同的特点:
不支持补充字符(仅限 BMP 字符)。
每个多字节字符最多三个字节。
什么是 BLOB?
BLOB 是一种二进制大对象,可以保存可变数量的数据。四种 BLOB 类型为 TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们仅在可以保存的值的最大长度上有所不同。四种 TEXT 类型为 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。它们对应于四种 BLOB 类型,具有相同的最大长度和存储要求。请参阅第 11.7 节 “数据类型存储要求”
...
BLOB 或 TEXT 对象的最大大小由其类型决定,但在客户端和服务器之间实际可以传输的最大值由可用内存量和通信缓冲区的大小决定。您可以通过更改 max_allowed_packet 变量的值来更改消息缓冲区大小,但您必须对服务器和客户端程序都这样做。
字符串类型的存储要求
在下表中,M 表示非二进制字符串类型的声明列长度(以字符为单位)和二进制字符串类型的声明列长度(以字节为单位)。L 表示给定字符串值的实际长度(以字节为单位)。
...
本页列出了 BLOB 和 TEXT 类型,并给出了计算所需存储空间的公式,但没有给出不同的最大大小。它们如下:
TINYTEXT-255 字节
文本-65535 字节
MEDIUMTEXT - 16,777,215 字节 (2^24 - 1)
LONGTEXT - 4G 字节 (2^32 – 1)
TINYBLOB-255 字节
BLOB-65535 字节
MEDIUMBLOB - 16,777,215 字节 (2^24 - 1)
LONGBLOB — 4G 字节 (2^32 – 1)