2

在远程服务器上,我将 textarea 中的文本(967 537 个字符)保存到 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 初始化:

post_max_size = 32M

阿帕奇:

suhosin.post.max_value_length = 1000000

在本地主机上,一切正常。

4

3 回答 3

3

使用MEDIUMTEXT还是LONGTEXT正常的TEXTMEDIUMTEXT可以包含 16,777,215 字节,大约 16MB,LONGTEXT可以包含 4,294,967,295 字节,因此大约 4GB。

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

编辑:

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

于 2012-10-19T09:16:49.763 回答
2

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

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

TEXT 类型的最大长度 < 2^16 (65536)

于 2012-10-19T09:17:05.737 回答
2

类型TEXT太小(如您所见,它最多只能容纳 64K 左右)。您可以使用MEDIUMTEXT达到 16M,或LONGTEXT获得更多。考虑到存储要求(每行一个额外的字节),如果存在超过 16M 的最小风险,请使用LONGTEXT.

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

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

这篇文章非常大的字段对 MySQL 数据库有负面影响吗?提倡 MySQL TEXT 存储,但也提出了一些关于为什么你可能不想要的考虑。

更新

在本地主机上,一切正常。

危险,威尔罗宾逊!localhost除非您的开发和生产数据库不同步,否则它无法运行。即,您MEDIUMTEXT在本地主机TEXT上和远程上都有。所以问题是,这两个数据库之间还有什么不同?虽然与您的问题无关,但您肯定要检查它!

于 2012-10-19T09:32:05.257 回答