我正在构建一个信息关联数组,然后通过执行 $histarray[] = $histrec;
然后我通过执行serialize($histarray)
将$histarray
写入mysql。我将要写入的字段定义为文本字段。当变量变得很大(> 64k)时,反序列化命令停止工作,当我查看时,数据被截断。我重写了功能来序列化 $histarray 并将其写入文件夹,然后读取它并反序列化它。这不会导致同样的问题并且效果很好。
我有 2 个问题。
- 我假设 mysql 数据库或写入它的 php 正在截断序列化数据,但具体是什么原因导致的呢?我认为定义为文本的字段的大小基本上是无限的。
- 在这种情况下,直接读取文件并将其写入文件夹是否比将此信息存储在 MYSQL 表中更快?它只是临时 session 数据,不需要存储。
最佳答案
1. I assume that the mysql database or the php write to it is truncating the serialized data, but what specifically is causing this? I thought a field that was defined as text was basically unlimited in size.
PHP 中的字符串通常没有大小限制(理论上,实际上总是有限制的)。但实际上,PHP 中的字符串可能非常大。 PHP 字符串限制在这里不是问题。
但是数据库中的字段有大小限制。您可能想要对大数据使用 BLOLB 类型字段,或者 LONGBLOB 或者在 MySQL 中调用它: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
当字段无法获取全部内容时,MySQL 会截断(而不是不更新/插入)。
2. Is it faster to just read and write a file to a folder in this situation rather than store this info in a MYSQL table. It is only temp session data and does not need to be stored.
如果您根本不需要存储,最快的方法就是不存储:不在数据库中也不在文件系统中。
如果您确实需要存储,这取决于您的系统配置哪个更快。数据库和文件系统两者都可以非常快。
关于PHP 写入 mysql 后出现反序列化错误,这会截断我的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567374/