为什么对php序列化对象使用blob字段

为什么对php序列化对象使用blob字段,php,mysql,Php,Mysql,我在某个地方读过一篇文章,建议在PHP中使用BLOB字段类型而不是CHAR来存储序列化对象。这是真的吗?为什么?1)会话数据是根据PHP定义的一组规则构造的,因此对DBMS来说应该是不透明的 2) (正如Fluffeh所暗示的)CHAR字段用于保存小块数据,并且通常对其大小有一个上限。数据将被截断 3) 即使在任何限制大于会话的已知最大大小的情况下,CHAR字段也具有恒定的占用空间,而不管它包含的数据量如何(与VARCHAR字段不同),因此您将在磁盘和内存上浪费空间 4) 在插入和检索时,DBM

我在某个地方读过一篇文章,建议在PHP中使用BLOB字段类型而不是CHAR来存储序列化对象。这是真的吗?为什么?

1)会话数据是根据PHP定义的一组规则构造的,因此对DBMS来说应该是不透明的

2) (正如Fluffeh所暗示的)CHAR字段用于保存小块数据,并且通常对其大小有一个上限。数据将被截断

3) 即使在任何限制大于会话的已知最大大小的情况下,CHAR字段也具有恒定的占用空间,而不管它包含的数据量如何(与VARCHAR字段不同),因此您将在磁盘和内存上浪费空间

4) 在插入和检索时,DBMS可能会更改存储在CHAR(和VARCHAR)字段中的数据表示形式(通常是更改字符集)


5) PHP字符串可能包含二进制数据(包括空值)。数据库管理系统可能会错误地解释转义数据的PHP方法(另请参见1)

您在哪里读到的以及参数是什么?无论如何,我认为这太主观了,所以我能想到的唯一一件事就是大小,而不是担心由于字段限制而切断序列化对象。除此之外,BLOB存储在MySQL表之外的每行文件中-不确定这是否比与表其余部分内联存储的char/varchar好。BLOB也是二进制的。谢谢,关于你的第二个建议-但是BLOB字段也有上限,所以也有可能会丢失数据,不关于你的第三个建议——我不是特别指CHAR字段,我是指一般的文本字段(CHAR,VARCHAR)。所以我可以得出结论,由于您提到的建议4和建议5,最好将序列化对象存储在BLOB字段中。