【问题标题】:Inserting French character into Oracle gets converted into some junk characters将法语字符插入 Oracle 会被转换为一些垃圾字符
【发布时间】:2015-06-09 06:51:00
【问题描述】:

使用 PL/SQL Developer,我可以在我的 Oracle 数据库中插入法语字符而不会出现任何错误。

查询:

SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_NCHAR_CHARACTERSET';

输出:AL16UTF16

但是当我使用 select 语句检索数据时,它会被转换为一些垃圾字符,例如:

système 被转换为 système 等等....

我们将不胜感激任何建议/解决方法。

【问题讨论】:

  • 你的操作系统是什么?您的特定于语言环境的 NLS 字符集是什么?这是一个显示问题,您的客户端无法正常显示。
  • 我使用的是 Windows 7。Pl/SQL 字符集 字符大小:4 字节 CharSetID:873 NCharSetID:2000 Unicode 支持:真 NLS_LANG:AMERICAN_AMERICA.WE8MSWIN1252 NLS_CHARACTERSET:AL32UTF8 NLS_NCHAR_CHARACTERSET:AL16UTF16
  • 你是怎么插入的?你是怎么查询的?什么是列数据类型? dump() show 到底存储了什么?
  • 最初只有英文,更新为添加其他语言,使用 Update 语句。列类型为 SYS.XMLTYPE,dump() 显示一些数值数据 Typ=58 Len=118:
  • 看起来您将 sql 文件保存为 UTF-8。在这种情况下,您的 NLS_LANG 也必须是 UTF8。

标签: oracle unicode plsqldeveloper


【解决方案1】:

问题是由于客户端和服务器的 NLS_LANGUAGE 值不同。

在服务器上是:AMERICAN 使用以下查询读取参数:

SELECT * FROM nls_database_parameters

在客户端是:AMERICAN_AMERICA.WE8MSWIN1252

在 PL/SQL Developer Help->About 中,点击 Additional Info 按钮并向下滚动。

我在尝试解决问题时观察到的其他事情: 这些字符在第一次更新时没有转换为垃圾字符。 但是当我检索它们(包含非 ascii 字符)并再次更新时,它们正在转换为垃圾字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多