哪个mysql列类型为serialize(数据)?

时间:2012-05-27 01:16:08

标签: php mysql

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

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

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

由于

2 个答案:

答案 0 :(得分:15)

始终使用任何BLOB data-type来序列化数据,以便它不会被切断并以二进制安全方式中断序列化。如果最终字符串的长度没有最大值,则需要LONGBLOB。如果您知道数据不会填充2 ^ 24个字符,则可以使用MEDIUMBLOBMEDIUMBLOB约为16MB而LONGBLOB约为4GB,所以我会说MEDIUMBLOB非常安全。

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

答案 1 :(得分:7)

你应该按照serialize()的PHP手册选择BLOB(如Marc B所说):

  

"注意,这[输出]二进制字符串,其可能包括空字节,并且需要如此存储和处理。例如,serialize()输出通常应存储在数据库的BLOB字段中,而不是存储在CHAR或TEXT字段中。"

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

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