【转】Oracle + PHP Cookbook(php oracle clob 长度超过4000如何写入)

本文介绍了在Oracle数据库中,当PHP操作CLOB字段长度超过4000个字符时的处理方法,链接指向原始来源提供详细教程。
摘要由CSDN通过智能技术生成
   

在甲骨文LOB和PHP工作 
由哈里Fuecks

达到4,000字节的限制?输入LOB ...

 

在这个“Oracle + PHP Cookbook”HowTo中,您将学习可用的LOB类型和与之相关的问题,然后探索PHP中常见的LOB操作的示例。使用像VARCHAR2这样的Oracle类型是很好的,但是如果你需要能够一次存储超过4,000字节的限制呢?对于此任务,您需要一个Oracle的长对象(LOB)类型,这反过来要求您了解如何使用PHP API来处理LOB。这本身对于那些不熟悉它的人来说是令人生畏的。

Oracle中的长对象

Oracle提供以下LOB类型:

  • BLOB,用于存储二进制数据
  • CLOB,用于存储使用数据库字符集编码的字符数据
  • NCLOB,用于存储使用国家字符集的Unicode字符数据。需要注意的是NCLOBs是,目前不被支持PHP OCI8扩展,你会在这里使用。
  • BFILE,用于引用操作系统文件系统下的外部文件
LOB的另一个子类是临时LOB,它可以是BLOB,CLOB或NCLOB,但存储在临时表空间中,直到您释放它。

请注意,旧版本的Oracle分别为字符和二进制数据提供了LONG和LONG RAW类型。随着Oracle9需要这些赞成的LOB被弃用。

LOB存储。对于BLOB,CLOB和NCLOB类型,Oracle数据库10 ğ能够在一个单一的值存储高达128TB,这取决于你的数据库块大小和“块”设置,为LOB定义的。

LOB本身包括两个元素:LOB内容和LOB定位符,其是到LOB内容的“指针”。这种分离需要允许Oracle存储和有效地管理LOB和它反映在使用到PHP的API INSERT, 数据库,和 选择的LOB(见下文)。

对于内部LOB类型(即不是BFILE),如果LOB的大小小于4KB,则Oracle将在表中存储LOB的内容以及行的其余部分。大于4KB的LOB在默认情况下在表的表空间中存储为“out-of-line”。此方法允许快速检索小LOB,而对于大LOB,访问时间将较慢,但是在扫描表时的整体性能被保留。

还有LOB存储和访问的其他选项,例如内存缓存和缓冲 - 这可以提高性能,具体取决于您的应用程序的具体情况。欲了解更多信息,请参阅 LOB性能指南和 Oracle数据库应用程序开发人员指南-大型对象在Oracle文档中获得。

LOB的限制。许多限制适用于使用LOB类型,最重要的是它们在SQL语句中的使用。您不能在以下任何查询中使用LOB类型。

SELECT DISTINCT <lob_type>
ORDER BY <lob_type>
GROUP BY <lob_col>
这也是非法的表连接,使用LOB类型列 UNION, INTERSECTION和 MINUS语句。

其他限制适用于LOB使用的其他方面,例如,您不能将LOB用作主键列。再次,看 Oracle数据库应用程序开发人员指南-大型对象的详细信息。

CLOB和字符集

数据库的默认字符集由参数NLS_CHARACTERSET定义,并且放置在CLOB中的文本应使用此字符集进行编码。使用此SQL来确定您的数据库字符集编码:

SELECT value FROM nls_database_parameters WHERE parameter ='NLS_CHARACTERSET'
由于缺乏对PHP中NCLOB的支持,您可能需要考虑使用Unicode编码作为数据库字符,例如UTF-8,可以使用以下语句完成(给予足够的权限):
ALTER数据库字符集UTF8
注意:不要在不理解影响的情况下尝试此操作,尤其是如果现有数据或应用程序代码使用不同的字符集。看到 甲骨文全球化支持指南对全球化的Oracle PHP应用程序概述了解更多信息。

使用LOB

这里的讨论将集中在PHP的OCI8扩展。还值得注意的是,Oracle提供了DBMS_LOB包,其中包含使用PL / SQL处理LOB的并行过程和函数。

PHP OCI8扩展在全局PHP命名空间中注册了一个名为“OCI-Lob”的PHP类。当您执行 SELECT语句,例如,其中一列是一个LOB类型,PHP将自动绑定这个到OCI-LOB对象实例。一旦你有一个OCI高球对象的引用,你可以调用方法一样 的load(&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值