将〜1kk字符文本保存到MySQL

时间:2012-10-19 09:10:08

标签: php mysql apache post config

在远程服务器上,我将文本(967 537个字符)从textarea保存到MySQL数据库,类型为TEXT的列。

只保存了大约63个748个字符。

另外,在phpMyAdmin中,我在执行UPDATE时遇到以下错误:

Warning: #1265 Data truncated for column 'content' at row 1

由于我自己无权更改配置文件,因此在我请求之前知道应该更改什么来解决此问题会很好。

版本:

PHP 5.2.14
MySQL 5.0.96
Apache 2.2.12

MySQL配置:

max_allowed_packet = 52428800
net_buffer_length = 8192

PHP ini:

post_max_size = 32M

的Apache:

suhosin.post.max_value_length = 1000000

在localhost上,一切正常。

3 个答案:

答案 0 :(得分:3)

使用正常MEDIUMTEXT的{​​{1}}或LONGTEXT内容。 TEXT可以包含16,777,215个字节,大约16MB,MEDIUMTEXT可以包含4,294,967,295个字节,因此大约4GB。

LONGTEXT可能有点大,所以我猜LONGTEXT就足够了。

修改

这只是我想到的:如果你有多个页面需要一直显示,那么比数据库有更好(和更快)的东西。您可以将其生成为纯文本HTML文件(即使只是TXT文件),并将其包含在您需要的时间和地点。这样你就不会有一个占用大量空间的数据库。

答案 1 :(得分:2)

您应该检查类型字段限制:

http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

TEXT类型具有maxlength< 2 ^ 16(65536)

答案 2 :(得分:2)

类型TEXT太小(如您所发现的,它最多只能容纳64K)。您可以使用MEDIUMTEXT达到16M,或LONGTEXT以获得更多。鉴于存储要求(每行一个额外字节),如果有最轻微的风险超过16M,请使用LONGTEXT

但我认为您应该质疑为什么要在数据库中存储数据。除非它是平台的间接要求(例如,它更容易使用ORM,而文件存储需要临时列数据驱动程序),或者您想要使用全文索引功能,存储可能更方便数据作为单独的文件,仅将文件名存储在数据库中(或者您可以使用tablename_primarykeyvalue.html作为文件名,从而节省文件名存储要求。)

“单独存储”方法使数据检索和备份复杂化。另一方面,备份将更小更快,磁盘使用率更低,如果您的安全模型允许,您可以允许直接访问绕过数据库的文件:例如,如果您要存储博客帖子,可以通过AJAX检索它们,减少数据库负载并利用浏览器缓存策略(在某些平台上,您可以直接提供压缩文件,从而提高速度并节省CPU)。

这篇文章Do very large fields have a negative effect on MySQL databases?提倡MySQL TEXT存储,但也提出了一些你可能不想要的注意事项。

更新

  

在localhost上,一切正常。

Danger,Will Robinson!除非您的开发和生产数据库未同步,否则它无法在localhost上运行。即,您在localhost上有MEDIUMTEXT,在远程上有TEXT。所以问题是,两个数据库之间还有什么不同?虽然与您的问题无关,但您肯定想要查看的内容!