我正在使用php序列化许多数组,并将其存储在使用mysql的数据库中。
最终字符串的长度可能会大大变化,从2000到100,000+之间的任何值都有可能。我想知道这种情况下最好的列类型是什么?
我目前将它设置为LONGTEXT
,但我觉得这太过了!该数据库已经处于活动状态,并且有大约3百万行,这是一个即将添加的新列。
谢谢
我正在使用php序列化许多数组,并将其存储在使用mysql的数据库中。
最终字符串的长度可能会大大变化,从2000到100,000+之间的任何值都有可能。我想知道这种情况下最好的列类型是什么?
我目前将它设置为LONGTEXT
,但我觉得这太过了!该数据库已经处于活动状态,并且有大约3百万行,这是一个即将添加的新列。
谢谢
在序列化数据时,始终使用任何BLOB
数据类型以使其不被截断并以二进制安全的方式进行序列化。如果没有对最终字符串长度的限制,则需要使用LONGBLOB
。如果您知道数据不会填满2 ^ 24个字符,则可以使用MEDIUMBLOB
。MEDIUMBLOB
大约为16MB,而LONGBLOB
大约为4GB,因此我认为您可以放心使用MEDIUMBLOB
。
为什么是二进制数据类型? MySQL中的文本数据类型具有编码。字符编码将影响序列化数据在不同编码之间的转置方式。例如,当以Latin-1存储但以UTF-8读出(例如由于数据库驱动程序连接编码设置)时,序列化数据可能会损坏,因为二进制偏移量已经发生了变化,而序列化数据没有为此类偏移进行编码。PHP的序列化字符串是二进制数据,没有特定编码。