从ISO-8859-2转换为ORACLE字符集AL16UTF16

use*_*774 2 php oracle encoding

您好,这是昨天的后续调查,

我有一个解析网站的PHP脚本。我现在要在UTF-8中获取字符串,我想将这些字符串插入使用以下代码的Oracle数据库中:

NLS_NCHAR_CHARACTERSET = AL16UTF16
NLS_CHARACTERSET = EE8ISO8859P2
Run Code Online (Sandbox Code Playgroud)

我已经尝试过:

$rep = iconv("UTF-8","AL-16UTF-16",$string);      
Run Code Online (Sandbox Code Playgroud)

//失败-产生?? 数据库或脚本中的错误因“错误的字符集”而失败

我也尝试过

$rep = iconv("UTF-8","ISO-8859-2",$string);
$rep1 = iconv("UTF-8","AL-16UTF-16",$rep); 
Run Code Online (Sandbox Code Playgroud)

与上述相同...失败?? 在数据库中。

有人知道下一步该怎么做吗?

tim*_*ton 5

OCI驱动程序隐式处理字符集转换。连接时,请确保将字符集设置为UTF-8

oci_connect($username, $password, $connection_string, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

这告诉OCI期望您提供从数据库字符集转换的UTF8格式的字符串和UTF8的结果集。从手册(重点是我的):

确定Oracle客户端库使用的字符集。字符集不需要与数据库使用的字符集匹配。如果不匹配,Oracle将尽最大努力在数据库字符集之间来回转换数据。根据字符集,这可能不会给出可用的结果。转换也增加了一些时间开销。

这意味着,假设您要输入的字符串位于UTF8中,则根本不需要使用iconv()。只需让OCI为您处理即可。