每当我尝试在句子中间用连字符保存oracle中的任何记录时,它就会在oracle中保存为反转的问号。只有当我执行此插入查询与其他查询组合并使用SQL plus应用程序一次执行时,才会发生这种情况。但是,当我使用SQL开发人员单独执行插入查询时,这种情况不会发生。为什么会发生这种情况,解决方案是什么呢?
答案 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,HorizontalBar和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您可能需要:
CHR(45)
数据类型而不是NVARCHAR2