PHP ODBC连接到Oracle,没有UTF-8

当我尝试通过ODBC数据源连接到Oracle时,我遇到了获得UTF-8支持的问题 PHP odbc_connect()</ code>。</ p>

所有这些都是在32位下完成的。 我正在使用oracle XE DB进行测试和instaclient11_2 32位驱动程序,ODBC数据源32it +放置在WAMP32bit服务器上。</ p>

Althougt我对Oracle 12c DB和客户端Home 10g 32位驱动程序有相同的结果。 </ p>

@TODAY使用64位instanclient驱动程序测试了这一切,在64位WAMP服务器上添加了ODBC 64DataSource。 仍然没有运气正确显示字符... </ p>

 &lt; html&gt; 
&lt; head&gt;
&lt; meta http-equiv =“Content-Type”content =“ text / html; charset = utf-8“/&gt;
&lt; / head&gt;
&lt; body&gt;

&lt;?php
$ connect = odbc_connect(”XEXDB“,”username“,”password“) ;

$ query =“SELECT col,'čaļi'INTERTESST”;

$ result = odbc_exec($ connect,$ query);

while(odbc_fetch_row($ result)){
$ name = odbc_result($ result,1);
$ surname = odbc_result($ result,2);
echo“$ name,$ surname&lt; br /&gt;”;
}

odbc_close($ connect );

?&gt;
</ code> </ pre>


</ p>

我从这段代码得到的结果:</ p>

 ?A?IS,A?aA?i 
Gunt?rs Salts,A?aA?i
</ code> </ pre>

但是应该 be:</ p>

 ĶAĶIS,čaļi
GuntārsŠalts,čaļi
</ code> </ pre>

我无法找到如何编写 odbc_connect()</ code>的$ dsn </ code>强制 charset = utf-8 </ code>,到目前为止没有运气与#code> charset = utf-8一起工作$ conn_string </ code>。</ p>

还尝试使用 utf8_encode()</ code>和 utf8_decode()</ code>(使用这个让我感到绝望)。</ p>

有没有人有过类似的问题,或者有人 有一些我可以尝试的建议吗?</ p>
</ div>

展开原文

原文

I am having a problem to get UTF-8 support, when i try to connect to Oracle throught ODBC Data Source with PHP odbc_connect().

Also all of this is being done under 32bits. I am using oracle XE DB for testing and instaclient11_2 32bit drivers, ODBC Data source 32it +placed on WAMP32bit server.

Althougt i have same result with Oracle 12c DB and client Home 10g 32bit drivers.

@TODAY Tested this all with 64bit instanclient drivers, added ODBC 64DataSource on 64bit WAMP Server. Still no luck to display chars corretly...

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<?php
$connect = odbc_connect("XEXDB", "username", "password");

$query = "SELECT col, 'čaļi' FROM TESST";

$result = odbc_exec($connect, $query);

while(odbc_fetch_row($result)){
  $name = odbc_result($result, 1);
  $surname = odbc_result($result, 2);
  echo "$name, $surname <br/>";
}

odbc_close($connect);

?>

Result i get from this code:

?A?IS, A?aA?i 
Gunt?rs Salts, A?aA?i 

But should be:

ĶAĶIS, čaļi
Guntārs Šalts, čaļi

I cant find how to write $dsn for odbc_connect() to force charset=utf-8, so far no luck to get working $conn_string with charset=utf-8.

Also tried to use utf8_encode() and utf8_decode()(using this was me being desperate).

Does anyone have had similar problem, or maybe someone have some suggestions i could try?

duanhuan3012
duanhuan3012 我已经尝试过,并且它显示正确,其他东西,你可以建议,因为我没有选择。没有提到我测试的所有,但我做了很多。
3 年多之前 回复
duanchai0028
duanchai0028 像你的Oracle之类的锁返回正确的UTF-8(因为它显示2个字符而不是1)-专注于显示问题。试试echo“Äaļi”;很可能它也不起作用,在这种情况下问题与Oracle无关。
3 年多之前 回复

1个回答



我发现,返回ODBC甚至ADO连接到ORACLE DB都有相同的返回值??? 而不是UNICODE字符。</ p>

为了解决这个问题,我必须在WINDOWS REGISTRY中为ORACLE键在32位64位位置添加数据库字符集的NLS_LANG字符串值。</ p>

  HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE --64位
HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ ORACLE --32位
</ code> </ pre>

以及STRING VALUE 在我的情况下(REG_SZ)和VALUE:</ p>

 “NLS_LANG”=“LATVIAN_LATVIA.BLT8MSWIN1257”
</ code> </ pre>

为了完整的图片,如果有人仍然没有得到它,我添加了reg文件转储:</ p>

  [HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE] 
@ =“”
“NLS_LANG “=”LATVIAN_LATVIA.BLT8MSWIN1257“
</ code> </ pre>
</ div>

展开原文

原文

I found out, that return of ODBC and even ADO connections to ORACLE DB had same returns of ??? instead of UNICODE chars.

To fix this, I had to add NLS_LANG string value with your DB charset in WINDOWS REGISTRY under 32 un 64 bit location for ORACLE key.

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE             --64 bits
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE --32 bits

and for STRING VALUE(REG_SZ) and VALUE in my case:

"NLS_LANG"="LATVIAN_LATVIA.BLT8MSWIN1257" 

And for complete picture if someone still didn't get it, I added dump of reg file:

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]
@=""
"NLS_LANG"="LATVIAN_LATVIA.BLT8MSWIN1257"

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐