oracle中的“¿”(倒置问号)字符

时间:2016-02-02 09:47:03

标签: sql oracle nls-lang

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

任何人都可以让我知道如何从桌子上避开这个角色。

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

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

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

的文字

2 个答案:

答案 0 :(得分:1)

一般来说,有两种可能性:

  1. 插入数据时(或数据库字符集不支持特殊字符),您的数据库表真的会因错误¿设置而导致NLS_LANG个字符。在这种情况下,LIKE '%¿%'条件应该有效。但是,这也意味着您的数据库中存在损坏的数据,并且几乎不可能纠正它们,因为¿代表任何错误的字符。
  2. 您的客户端(例如SQL * Plus)无法显示由错误的NLS_LANG设置导致的特殊字符,或者字体不支持特殊字符。
  3. 您使用哪个客户端(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)后会得到什么?

答案 1 :(得分:1)

这真的是一个简单的引用(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