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

had*_*ley 11 php mysql

我在php中序列化很多数组,使用mysql存储在数据库中.

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

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

谢谢

J.M*_*ney 16

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

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


Eth*_*han 7

您应该根据序列化()的PHP手册选择BLOB(如Marc B所述):

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

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

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