gpt4 book ai didi

php - Laravel Eloquent 对象,长文本被截断

转载 作者:行者123 更新时间:2023-11-29 01:13:20 25 4
gpt4 key购买 nike

我使用 Laravel,将数据库行加载到 Eloquent 对象中。其中一列是 longtext,一个 JSON 编码的数组,长度超过 200 万个字符。我得到的原始错误是 json_decode 在此列的值上失败。

我在 tinker 中测试过。简化测试代码:

$item = Item::find(1);
echo $item->long_text_field;
var_dump(json_decode($item->long_text_field));
echo strlen($item->long_text_field);

在我本地的 vagrant 实例中,这显示了正确的值。

...long json array in text, same as the value in the actual DB entry...
...var_dump of json array...
2334040

但是在我的远程开发服务器上我得到了

...long json array truncated in the middle...
NULL
1048576

显然 json_decode 失败了,因为字符串被截断了。

它截断成这样

"Eff Date":"1\”

应该是什么

"Eff Date":"1\/30\/14 16:13”

在长文本中有很多像这样的转义斜线,我看不到那个地方的奇怪字符。有谁知道为什么这段文本会在一台服务器上截断,而不是在另一台服务器上截断?

最佳答案

问题是默认的 PDO::MYSQL_ATTR_MAX_BUFFER_SIZE 大小是 1Mb。

要在 Laravel 中进行设置,您需要在 database.php 配置文件中添加一个选项。

'connections' => [
'mydb' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'mydb',
'options' => [
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => 16777216
]
]
]

以上将最大属性大小设置为 16Mb。

请注意,如果您使用的是 mysqlnd 驱动程序,则不再需要它,它实际上会破坏您的代码,因为 PDO::MYSQL_ATTR_MAX_BUFFER_SIZE 常量不存在。

关于php - Laravel Eloquent 对象,长文本被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26183950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com