我在 Oracle 中使用 PDO,当我尝试在“LONG”类型的列上使用“fetchAll”时,如果里面的数据超过 512 个字符,则会出现以下警告:
警告:PDOStatement::fetchAll() [pdostatement.fetchall]: 列 X 数据对于缓冲区来说太大,被截断以适合第 69 行的 (...)
PHP 版本 5.2.17 Oracle 版本:11g PDO 驱动程序:oci
我有一个类似的问题。选定的列之一是 oracle 时间戳数据类型,因此在我的情况下,帮助使用定义的日期格式封装此列,例如如下所示:
SELECT TO_CHAR(column_name, 'YY/MM/DD HH24:MI:SS') as column_name
FROM table
详细信息:即出现问题的列。在 varchar2( X ) 中,X = 所需大小。示例:从表中选择 cast(name_column AS varchar2(70))作为昵称;
我在 2020 年使用 PHP 7.2 和最新版本的 PHP PDO OCI 库时仍然遇到这个问题。我的解决方案是改用 oci_connect,并使用它来拉长字段。
我发现一个很好的参考是使用:https ://www.oracle.com/technical-resources/articles/fuecks-lobs.html
我有同样的问题,但在我的情况下,数据类型是 varchar。问题是我使用 varchar(3) 来存储诸如“NÃO”之类的东西。由于 'Ã' 使用超过 1 个字节来存储,所以当我尝试 fetchAll 时,我收到了相同的警告。
检查您存储的数值是否大于 Long 的大小。在 Oracle 中更改列的大小。
你必须在oracle中改变varchar的大小,例如:如果你需要50个字符的另一个符号,你必须写
varchar2(100)
在模型 yii 中你必须写length 100