【问题标题】:Data from oracle in utf-8 with php带有 php 的 utf-8 中的 oracle 数据
【发布时间】:2013-11-28 13:13:21
【问题描述】:

我在从 oracle 数据库获取数据时遇到问题。如何获取 utf-8 格式的数据?浏览器显示带有回声的符号,但来自 oracle 的数据有?标记而不是字母

    <head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"></meta>
</head>
<?php

 $tns2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)) (CONNECT_DATA = (SID = sidname)))";
   if ($conn = oci_connect("user","pass", $tns2))
   {
       echo "YAY!";
       //oci_close($conn);
   }
   else
   {
       die("Nesiseka");
   }

$stid = oci_parse($conn, 'SELECT * rowname where rownum<=10');
oci_execute($stid);

oci_close($conn);

echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";
echo"įęėšųį";
?>

【问题讨论】:

  • SELECT * rowname where rownum&lt;=10 不是有效的 oracle 查询。
  • 你的 NLS_* 会话和数据库变量是用什么设置的?
  • 但一切正常,除了我认为不是 UTF-8 的 oracle 数据库中的数据
  • 什么是数据库字符集?您是否正确设置了 NLS_LANG 环境变量?

标签: php oracle


【解决方案1】:

设置 php 编码为 utf 8

mb_internal_encoding("UTF-8");

更多链接 http://php.net/manual/en/function.mb-internal-encoding.php

【讨论】:

  • 已经设置好了, echo"įęėšųį";显示正常,但来自 oracle 数据库的数据显示为?而不是 čęėšųū
【解决方案2】:

简单的解决方案。只在if ($conn = oci_connect(username,pass, $tns2 , 'AL32UTF8')) 行添加'AL32UTF8' 现在一切正常。 谢谢你的帮助

【讨论】:

  • 它适用于 Oracle 11g,但不适用于 Oracle 10g。有什么想法吗?
  • 它也适用于 Oracle 10g。检查来自 Oracle 的 Globalization Support Guide
  • 在 oracle 数据库 12c 上帮助我使用 symfony 4,其中 utf-8 字符不想在我的树枝模板中正确显示
  • 在搜索了几个小时后救了我的命,当使用德语特殊字符查询数据库时出现问题并且结果丢失。
【解决方案3】:

使用它来建立数据库连接:

$conn = oci_connect(username,pass, $tns2 , 'AL32UTF8')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 2012-04-20
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多