2017-05-26 28 views
0

每當我嘗試保存與連字符在句子中的任何記錄,然後它在oracle中保存爲倒置問號。這只是當我執行此插入查詢與其他查詢組合並執行所有在一次使用SQL加應用程序。但是,當我使用SQL開發人員單獨執行插入查詢時,這不會發生。爲什麼會發生這種情況,這有什麼解決方案?爲什麼在嘗試在oracle中保存連字符( - )時會反轉問號(¿)?如何擺脫這一點?

+0

你在SQLPlus中得到了什麼「選擇」 - 「雙重結果」;「命令?默認轉義可能存在一些問題,我認爲連字符不應該是默認的特殊字符。 – Galcoholic

+0

當我嘗試在sql plus中獲得' - '的結果時,它返回0條記錄。 – VasuDev

+2

鍵盤上的連字符是ASCII 45,並且受所有字符集支持。你必須粘貼延長的連字符或有趣的東西。 – sandman

回答

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> 

你看FigureDash,Horizo​​ntalBar和HyphenBullet不受CP1252支持,根據您的要求你必須選擇另一個字符集,例如UTF-8

C:\>chcp 65001 
Active code page: 65001 

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

看一看this answer得到一些更多有關NLS_LANG設置。

1

有多種不同的連字符/破折號/負字符:

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 

只有-CHR(45))是基ASCII字符集內。如果您的列僅支持此功能,則擴展字符集內的字符可能無法正確顯示。

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

  • change the database's character set到支持您所使用的字符的東西;或
  • 使用NVARCHAR2數據類型而不是VARCHAR2
  • 只有在輸入使用支持的字符(並拒絕包含在擴展字符集chatacters任何字符串)。
+1

由於SQL-Developer正確插入字符,所以第一個和第二個提議不應有效。顯然,數據庫和使用的數據類型正確地支持所需的字符。 –

相關問題