数据库中有一个字段是longtext
存储的字段超过1M时,通过PDO获取该字段时,该字段会被截断为1M(即长度为1048576)
该问题是由于PDO的配置问题导致
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE PDO的预设缓冲 默认为1M
/**
* <p>
* Maximum buffer size. Defaults to 1 MiB. This constant is not supported when
* compiled against mysqlnd.
* </p>
* @link http://php.net/manual/en/ref.pdo-mysql.php#pdo.constants.mysql-attr-max-buffer-size
*/
const MYSQL_ATTR_MAX_BUFFER_SIZE = 1005;
如果PHP编译了mysqlnd扩展,则会导致PDO不支持MYSQL_ATTR_MAX_BUFFER_SIZE的预定义了,则获取字段是没有限制
如果没有编译mysqlnd,没有对MYSQL_ATTR_MAX_BUFFER_SIZE进行配置,则取默认1M,即单个字段最大为1M,超过会被截断
thinkphp 在database 配置文件 params 中添加 PDO::MYSQL_ATTR_MAX_BUFFER_SIZE 值
// 数据库连接参数
'params' => [
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE=>16777216
],