meta值是LONGTEXT
字段,它可以存储大约4 GB(GB)的字符(非二进制),但我无法帮助您测试限制,并注意可以存储的字符数将取决于字符编码。
引用MySQL 8.0参考手册:
Note: 这四种文本(数据)类型是TINYTEXT
, TEXT
, MEDIUMTEXT
, 和LONGTEXT
.
VARCHAR
, VARBINARY
, BLOB和TEXT类型是可变长度类型。对于每种类型,存储要求取决于以下因素:
列值的实际长度
列的最大可能长度
用于列的字符集,因为某些字符集包含多字节字符
例如VARCHAR(255)
列可以容纳最大长度为255个字符的字符串。假设列使用latin1
字符集(每个字符一个字节),所需的实际存储是字符串的长度(L
),再加上一个字节来记录字符串的长度。对于字符串\'abcd\'
, L
为4,存储要求为5字节。如果声明相同的列,则使用ucs2
双字节字符集,存储要求为10字节:长度为\'abcd\'
是八个字节,列需要两个字节来存储长度,因为最大长度大于255(最多510字节)。
同一手册中的另一句话:
BLOB或TEXT对象的最大大小由其类型决定,但实际上可以在客户端和服务器之间传输的最大值由可用内存量和通信缓冲区的大小决定。。。您可能还想将数据包大小和存储的数据对象大小与存储要求进行比较,请参阅第11.7节“数据类型存储要求”
实际上,问题更多的是关于MySQL/数据库,而不是WordPress特定的API/函数,因此堆栈溢出是更好的地方,可以进一步了解LONGTEXT
.
然而,为了以防万一,存储一个巨大的数字/整数不应该是一个问题,因为它在数据库中被视为一个字符串,所以例如插入PHP_INT_MAX
价值(即9223372036854775807
就我而言)对我来说效果很好:
add_post_meta( 1, \'foo\', PHP_INT_MAX );
$value = get_post_meta( 1, \'foo\', true ); // 9223372036854775807
var_dump( PHP_INT_MAX === (int) $value ); // true
References:
// Only the *first* metadata gets added.
$id = add_post_meta( 1, wp_generate_password( 255, false ), \'test\' ); // meta key = 255 chars
$id2 = add_post_meta( 1, wp_generate_password( 256, false ), \'test\' ); // meta key = 256 chars
var_dump( $id, $id2 ); // int(<meta ID>), bool(false)