当前位置: 首页 > 知识库问答 >
问题:

PDO OCI截断大型多字节CLOB

濮阳安澜
2023-03-14

当PDO OCI通过PDO::Fetch()返回我的行时,我的CLOB列已经是PHP流了。在长CLOB中包含多字节UTF-8字符的情况下,当我读取这个流时,它会被截断。

实例

  • 我的头饰是一串8193英镑的符号(“”)...16,386字节
  • 返回的行数组将列显示为“resource type='stream'”
  • 我执行stream_get_contents()从流中获取字符串
  • 我的字符串为8,192个字符...16,384字节
  • 因此我失去了一个字符

另:

    <丽>我的头饰是一串10万英镑的标志...200,000字节
  • 与上述步骤相同
  • 我的字符串是50,848个字符...101,696字节
  • 因此我丢失了49,152个字符

我可以通过获取整个CLOB的完整大小(lob->size())并将其用作LOB读取大小来解决这个问题,从而在一次大读取中提取所有内容。

我在PDO OCI看不到这样做的方法。

我的预感是,PDO OCI中的内部代码可能正在执行类似的读取循环,以将LOB转换为PHP流。

共有1个答案

微生烨然
2023-03-14

事实证明,这可能确实是一个PDO_OCI bug:“base bug需要修复(还没有关于这个的ETA)”(https://github.com/php/php-src/pull/1566,引用(https://bugs.php.net/bug.php?id=60994)。

 类似资料:
  • 问题内容: 我正在尝试在字符串过滤器中使用此方法: 我希望这 还有这个 那是减去字符串的字符。 另外,假定过滤器在低于限制的第一个单词边界处剪切,例如 我很确定这应该与这些步骤一起使用 从终止符中减去终止符中的字符数 验证该字符串是否长于计算出的限制,或者将其保留不变 在计算的限制以下找到字符串中的最后一个空格字符以获取单词边界 如果找不到最后一个空格,则在最后一个空格处剪切字符串或计算出的限制

  • 问题内容: 我有大量文件,所有文件都(应该)是在文件末尾附加一个前哨字符(1个字节)。如何读取最后一个字节(以确保它是字符)并将其截断为大小(即:删除字符)? 我知道我可以阅读整个内容,然后将其写回去减去最后一个字符,但是必须有一种方法可以获取特定的字节,不是吗? 问题答案: 您可以使用RandomAccessFile类查找文件的末尾,读取它,然后使用截断该文件。 更新: 这是一些代码: 注意:我

  • 问题内容: 如何在Python中将字符串截断为75个字符? 这是用JavaScript完成的方式: 问题答案:

  • 问题内容: 我试图截断一个表,但是为什么它不起作用?数据库查询中一定有问题吗? 理想情况下,我想一次性截断所有表-有可能吗? 如果您想知道我用来进行数据库查询的类的内容是什么, 谢谢。 编辑: 下面是我如何调用db对象, 问题答案: 谢谢你们的帮助!这是我的答案,

  • 问题内容: 我有一列字符串,每个字符串中都有一个城市,州和数字。 不仅限于此,但我想知道如何截断此列中的数字并仅显示城市和州,或者甚至更好地截断这些数字,然后将城市和州作为一个单独的列。 对于所有不同的记录,该列始终采用相同的格式。 谢谢! 问题答案: 没有为您做所有的工作… City:列的子字符串,从位置0到第一次出现逗号-1. State:列的子字符串,从第一次出现逗号后的2个位置到下一个空格

  • 根据指定的长度截断字符串。 确定字符串的 length 是否大于 num。 返回截断所需长度的字符串,用 '...' 附加到结尾或原始字符串。 const truncateString = (str, num) => str.length > num ? str.slice(0, num > 3 ? num - 3 : num) + '...' : str; truncateString('