13

我在 php 中序列化了很多要使用 mysql 存储在数据库中的数组。

最终字符串的长度可以从 2000 到 100,000+ 之间变化很大,我想知道最好的列类型是什么?

我目前将其设置为,LONGTEXT但我觉得这有点矫枉过正!该数据库已经处于活动状态,大约有 300 万行,这是一个很快就会添加的新列。

谢谢

4

2 回答 2

18

始终使用任何BLOB数据类型来序列化数据,这样它就不会被切断并以二进制安全的方式破坏序列化。如果最终字符串的长度没有最大值,那么您将需要LONGBLOB. 如果您知道数据不会填充 2^24 个字符,则可以使用MEDIUMBLOB. MEDIUMBLOB大约 16MB 而LONGBLOB大约 4GB 所以我会说你对MEDIUMBLOB.

为什么是二进制数据类型?MySQL 中的文本数据类型具有编码。字符编码将影响序列化数据在不同编码之间的转置方式。例如,当存储为 Latin-1 但随后读取为 UTF-8 时(例如,由于数据库驱动程序连接编码设置),序列化数据可能会被破坏,因为二进制偏移确实发生了偏移,但序列化数据并未针对此类偏移进行编码。PHP 的序列化字符串是二进制数据,没有任何特定的编码。

于 2012-05-27T01:46:49.743 回答
7

您应该根据 PHP 手册为 serialize() 选择 BLOB(如 Marc B 所述):

“请注意,这 [输出] 可能包含空字节的二进制字符串,需要按原样存储和处理。例如,serialize() 输出通常应存储在数据库的 BLOB 字段中,而不是 CHAR 或文本域。”

来源: http: //php.net/serialize

当然,还必须牢记 J.Money 关于大小的输入 - 即使 BLOB 也有其限制,如果您要超过它们,那么您将需要 MEDIUMBLOB 或 LONGBLOB。

于 2014-12-09T21:31:12.400 回答