如何使用php oracle保存具有nvarchar数据类型的列的数据

时间:2017-07-28 09:06:02

标签: php oracle

我想将所有unicode数据保存在oracle数据库中定义为nvarchar的列中:

  

“आवस्यकताहैै्राइवर्सकीपूर्णव्वरणकेसेथसंपर्ककरें - यादव   (8000000008)“

但是当我运行我的插入查询时,我会进入nvarchar类型的列 在数据库中。

  

¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿   (8000000008)

所以我的问题是 - >如何使用nvarchar php保存具有oracle数据类型的列的数据?

这是我想要做的事情 -

putenv("ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1");
putenv("LD_LIBRARY_PATH=//u01/app/oracle/product/11.2.0/db_1/lib:/lib:/usr/lib");
$conn = oci_connect('db1', 'ps1', '//xxx.xx.xx.xx:1521/orcl', 'AL32UTF8') or die('db not connected');

     $stmt=oci_parse($conn,"INSERT INTO TABLENM (VAL1, VAL2, VAL3, VAL4, VAL5 )  VALUES (:VAL1, :VAL2, :VAL3, :VAL4,  :VAL5 )");
     $VAL1 = "JK";
     $VAL2 = "10005072";
     $VAL3 = "27-JUL-17";
     $VAL4 = 1;
     $VAL5 = "आवस्यकता है ड्राइवर्स की पूर्ण विवरण के साथ संपर्क करें - यादव (8000000008)"; // VAL5 is created with datatype nvarchar in database
       oci_bind_by_name($stmt, ':VAL1', $VAL1, 1000);
       oci_bind_by_name($stmt, ':VAL2', $VAL2, 1000);
       oci_bind_by_name($stmt, ':VAL3', $VAL3, 1000);
       oci_bind_by_name($stmt, ':VAL4', $VAL4, 1000);
       oci_bind_by_name($stmt, ':VAL5', $VAL5, 1000, SQLT_LBI);


     $RES =   oci_execute($stmt, OCI_DEFAULT);
     oci_commit($conn);
     echo "<pre>";
     print_r($RES);  

我从here找到了此SQLT_LBI,但它对我不起作用。

有没有机会完成这件事?

请帮忙!

1 个答案:

答案 0 :(得分:2)

PHP OCI8或PDO_OCI都不支持NVARCHAR,NCHAR或NCLOB类型。 http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html的第149页截至目前仍然有效:

  

不支持Oracle的NCHAR,NVARCHAR2和NCLOB类型   OCI8扩展

可能有一些奇怪的环境(?),但这可能只是DB字符集宽度足以容纳DB国家字符集的地方。