我可以在一个选项中存储多少字符串内容?

时间:2012-10-31 作者:rg89

我将创建一个新的插件,它获取远程内容并将其存储在本地,以便在WP网站上使用。我有一个免费的插件,可以在推特和推特上实现这一点,我在插件目录中存储了一个JSON文件。一些用户抱怨插件由于权限问题无法将文件写入文件夹。

出于这个原因,我一直在考虑将这个新插件的远程内容存储在一个选项中。250kb的HTML对于选项来说是否太大了?是否有另一个API调用可以帮助我存储大量字符串数据?

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

查看中的表架构wp-admin/includes/schema.php:

// regular blog tables
CREATE TABLE $wpdb->options (
  option_id bigint(20) unsigned NOT NULL auto_increment,
  option_name varchar(64) NOT NULL default \'\',
  option_value longtext NOT NULL,
  autoload varchar(20) NOT NULL default \'yes\',
  PRIMARY KEY  (option_id),
  UNIQUE KEY option_name (option_name)
) $charset_collate;

// Multisite options
CREATE TABLE $wpdb->sitemeta (
  meta_id bigint(20) NOT NULL auto_increment,
  site_id bigint(20) NOT NULL default \'0\',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY meta_key (meta_key),
  KEY site_id (site_id)
) $charset_collate;
在这两种情况下,值均为longtext. 这个MySQL manual says 关于该类型:

最大长度为4294967295或4GB(2-32-1)个字符的文本列。如果该值包含多字节字符,则有效最大长度较小。长文本列的有效最大长度还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每个LONGTEXT值都使用4字节长度前缀存储,该前缀指示值中的字节数。

4GB。如果这还不够,请改进清理过程。也许您应该将内容存储为文件–in the uploads directory.

SO网友:djb

这是一个长期的领域。。。

mysql> describe wp_options;
+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| option_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(64)         | NO   | UNI |         |                |
| option_value | longtext            | NO   |     | NULL    |                |
| autoload     | varchar(20)         | NO   |     | yes     |                |
+--------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
。。。这意味着它可以容纳大约4G字节。https://stackoverflow.com/a/4294527/751089

这是一个非常好的选项,因为信息与帖子或用户等没有直接关系。一般来说not a good idea 将大量数据存储在一个字段中,但推特是非常可替换的。

最后,对于存储推文和其他变化数据,您可能需要查看Transients API, 这可以帮助您不时刷新它们。

SO网友:thespacecamel

虽然这是真的LONGTEXT 列,理论上最多可以容纳4GB,您还需要考虑MySQL的“max\\u allowed\\u packet”大小。

设置“max\\u allowed\\u packet”限制了单个MySQL查询中可以发送的数据量及其default value is only 16MB.

大多数共享主机不允许您更改该值。即便如此,您可以在MySQL中设置的最大值也是1GB。

因此,对于希望在大多数共享主机上工作的插件,WP选项不应大于16MB。

结束