为什么在尝试在oracle中保存连字符( - )时,倒置的问号(¿)是否正在保存?如何摆脱这个?

时间:2017-05-26 07:25:09

标签: oracle oracle11g

每当我尝试在句子中间用连字符保存oracle中的任何记录时,它就会在oracle中保存为反转的问号。只有当我执行此插入查询与其他查询组合并使用SQL plus应用程序一次执行时,才会发生这种情况。但是,当我使用SQL开发人员单独执行插入查询时,这种情况不会发生。为什么会发生这种情况,解决方案是什么呢?

2 个答案:

答案 0 :(得分:2)

SQL Developer是基于Java的,不使用NLS_LANG设置但SQL * Plus使用,所以你必须正确设置NLS_LANG

您没有告诉我们您使用的连字符,请参阅MT0的回答。在您的问题中,您使用了ASCII中的U+002D (CHR(45)) - 这肯定会产生任何问题。

SQL * Plus从调用命令行继承字符集,您必须相应地设置NLS_LANG,例如:

C:\>chcp 1252
Active code page: 1252

C:\>set NLS_LANG=.WE8MSWIN1252

C:\>sqlplus ...

SQL> SELECT UNISTR( '\002D' ) AS HyphenMinus,
  2         UNISTR( '\2010' ) AS Hyphen,
  3         UNISTR( '\2011' ) AS NonBreakingHyphen,
  4         UNISTR( '\2012' ) AS FigureDash,
  5         UNISTR( '\2013' ) AS EnDash,
  6         UNISTR( '\2014' ) AS EmDash,
  7         UNISTR( '\2015' ) AS HorizontalBar,
  8         UNISTR( '\2043' ) AS HyphenBullet
  9  FROM   DUAL;

H H N F E E H H
- - - - - - - -
- - - ¿ – — ¿ ¿

SQL>

您会看到CP1252不支持FigureDash,Horizo​​ntalBar和HyphenBullet,具体取决于您的要求,您必须选择其他字符集,例如: UTF-8

C:\>chcp 65001
Active code page: 65001

C:\>set NLS_LANG=.AL32UTF8
C:\>sqlplus ...

请查看this answer以获取有关NLS_LANG设置的更多信息。

答案 1 :(得分:1)

有多个不同的连字符/短划线/减号字符:

.nav{
  height:90%;
  width:75%;
  margin:-35px auto;
}

只有SELECT UNISTR( '\002D' ) AS HyphenMinus, UNISTR( '\2010' ) AS Hyphen, UNISTR( '\2011' ) AS NonBreakingHyphen, UNISTR( '\2012' ) AS FigureDash, UNISTR( '\2013' ) AS EnDash, UNISTR( '\2014' ) AS EmDash, UNISTR( '\2015' ) AS HorizontalBar, UNISTR( '\2043' ) AS HyphenBullet FROM DUAL -)在基本ASCII字符集中。如果您的列仅支持此列,则扩展字符集中的字符可能无法正确显示。

Check what character set your database is using您可能需要:

  • change the database's character set支持您正在使用的角色;或
  • 使用CHR(45)数据类型而不是NVARCHAR2
  • 仅使用输入中支持的字符(并拒绝扩展字符集中包含聊天的任何字符串)。