Laravel Eloquent对象,longtext被截断

 deadman21 发布于 2022-12-18 14:45

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

我在修补中测试过.简化的测试代码:

$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”

从长远来看,这里有很多逃脱的斜线,在这一点上我看不到任何奇怪的角色.有没有人知道为什么这个文本会在一台服务器而不是另一台服务器上截断?

1 个回答
  • 问题是默认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不变不存在.

    2022-12-18 14:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有