将 html 字符串存储到 oracle blob


Store html string to oracle blob

我必须使用php将包含html数据的字符串存储到oracle blob字段中。所以我正在使用

utl_raw.cast_to_raw('myString')

但是当 myString 大小超过 4000 字节时,我无法存储。如何解决这个问题?

我必须使用 php 将包含 html 数据的字符串存储到 oracle blob 字段中

考虑使用 CLOB 而不是 BLOB。HTML 可以被视为字符串文字。字符串文本本质上是一个VARCHAR2。因此,字符串文本的长度不能超过 4000 characters 。您需要将它们4000 bytes以块的形式附加到单个 CLOB 中,以存储超过 4000 个字节。

文档中

包含单字节或多字节的字符大对象 字符。固定宽度和可变宽度字符集都是 支持,两者都使用数据库字符集。最大大小为 (4 千兆字节 - 1( * (数据库块大小(。

例如

SQL> CREATE TABLE t_clob
  2    (col CLOB
  3    );
Table created.
SQL> INSERT
  2  INTO t_clob VALUES
  3    (
  4    TO_CLOB
  5    (RPAD('<table ><tbody><tr><td>Some text</td></tr></tbody></table>', 4000, '*'))
  6    ||RPAD('<table ><tbody><tr><td>Some text</td></tr></tbody></table>', 4000, '*')
  7    ||RPAD('<table ><tbody><tr><td>Some text</td></tr></tbody></table>', 4000, '*')
  8    );
1 row created.
SQL> SELECT LENGTH(col) FROM t_clob;
LENGTH(COL)
-----------
      12000

从 Oracle 12c 开始,VARCHAR2的最大大小现在扩展到32767 字节。默认情况下,参数MAX_STRING_SIZESTANDARD,最多可容纳 4000 个字节。

SQL> show parameter MAX_STRING_SIZE
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_string_size                      string      STANDARD

您可以将参数值更改为 EXTENDED 并将最大值 VARCHAR2 增加到 32767 字节。

主要有两个重要步骤:

ALTER SYSTEM SET max_string_size=extended;
@?/rdbms/admin/utl32k

Blob 用于二进制数据(图像、文档(,如果您使用 TEXTS 而不是 CLOB。

BLOB 是二进制 LOB。CLOB 是字符 LOB。

使用 CLOB,您可以存储超过 4000 字节