【发布时间】: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 环境变量,因为如果进程已经初始化,则可能无法读取,例如使用持久连接时。