【问题标题】:"¿" (inverted question mark) character in oracleoracle中的“¿”(倒转问号)字符
【发布时间】:2016-05-11 01:07:32
【问题描述】:

我在数据库表中发现“¿”字符(倒问号)代替了单引号(')字符。

谁能告诉我如何避免这个角色出现在桌子上。

有很多行包含带有此字符的文本,但并非所有单引号都指向此 ¿ 符号。

我什至无法过滤行以再次使用单引号更新此字符 (¿)。

当我用户喜欢“%¿%”时,它会过滤我包含普通问号 (?) 的文本

【问题讨论】:

标签: sql oracle nls-lang


【解决方案1】:

一般有两种可能:

  1. 您的数据库表真的¿ 字符在插入数据时由错误的NLS_LANG 设置引起(或者数据库字符集不支持特殊字符)。在这种情况下,LIKE '%¿%' 条件应该起作用。但是,这也意味着您的数据库中有损坏的数据,并且几乎不可能更正它们,因为¿ 代表 any 错误字符。
  2. 由于NLS_LANG 设置错误或字体不支持特殊字符,您的客户端(例如 SQL*Plus)无法显示特殊字符。

您使用哪个客户端(SQL*Plus、TOAD、SQL Developer 等)?

你的NLS_LANG 环境变量是什么?您的注册表项 HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANGHKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG

当您从表中选择DUMP(... , 1016) 时会得到什么?

【讨论】:

    【解决方案2】:

    它真的是一个简单的引用(ASCII 39)吗?如果它们实际上是某种“智能引号”,那么它们在 windows-1252 中确实有映射,但它们没有 ISO-8859 映射,所以如果您的数据库字符集是 ISO-8859-1 并且您尝试插入一些 windows- 1252 文本,Oracle 尝试从 windows-1252 转换为 ISO-8859-1 并使用 chr(191) 表示不可映射的字符。 chr(191) 恰好是开头的问号。

    您可以通过执行此检查(复制选择以保留智能引号):

    select dump('‘’“”') from dual
    

    这种行为基本上是“正确的”,因为您要求 Oracle 做的事情无法完成,尽管它不是很直观。

    参见windows-1252ISO8859-1ISO-8859-15 字符集进行比较。请注意,Windows 使用 ISO 字符集中未使用的范围 127-159

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多