【问题标题】:Inserting into NVARCHAR column type using PHP Oracle使用 PHP Oracle 插入 NVARCHAR 列类型
【发布时间】:2018-01-04 06:37:13
【问题描述】:

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

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

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

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

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

这就是我想要做的-

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,但它不适合我。

有没有机会完成这项工作?

请帮忙!

【问题讨论】:

  • 解释它是如何“不工作”的。添加错误和所有可能有助于人们回答您的问题的详细信息。
  • 不要使用SQLT_LBI。如您链接的“用于 LONG RAW 列”的 PHP 手册页所述。 NVARCHAR 是字符(unicode)数据类型。
  • 好的。但我在那个列表上找不到NVARCHAR 的任何东西。那么我应该怎么做才能保存这种数据呢?
  • 正如我所写的,它是字符数据。所以要么什么都没有,因为默认是SQLT_CHR,或者明确地SQLT_CHR
  • 专业提示:永远不要使用 putenv() 在脚本中设置 Oracle 环境变量,因为如果进程已经初始化,则可能无法读取,例如使用持久连接时。

标签: php database oracle


【解决方案1】:

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 国家字符集的情况下。

【讨论】:

    猜你喜欢
    • 2022-08-20
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多