2017-03-20 51 views
0

我有一個問題,將ñchatacter插入Oracle數據庫。無法向Oracle數據庫插入ñ字符

INSERT操作成功完成。 但是,當我選擇,我得到n而不是 - 。

而且,我注意到執行:

select 'ñ' from dual; 

給我 'N'。

select * from nls_database_parameters where parameter='NLS_CHARACTERSET'; 

給我'EE8MSWIN1250'。

如何插入? 我想避免修改數據庫設置。


我得到這個工作的唯一辦法是:

  1. 讀取輸入的.csv其窗口-1250編碼
  2. 改變編碼文件爲Unicode
  3. 改變字符串轉換爲Unicode碼錶現(其中ñ是\ 00d1)
  4. 執行INSERT/UPDATE將值從#3傳遞給UNISTR函數

確實有一個更簡單的方法來實現這一點。

回答

2

該字符是否支持數據庫字符集? 我在這裏找不到那個字符:https://en.wikipedia.org/wiki/Windows-1250

我沒有問題在我的數據庫中插入字符集WE8MSWIN1252。 https://en.wikipedia.org/wiki/Windows-1252

+0

即使db字符集是EE8MSWIN1250,我也可以在數據庫中看到一些ñ-s。問題是,我無法弄清楚如何插入 - 我自己。它總是被翻譯成n。 – DevDav

+0

檢查您在數據庫中找到的字符的字節值以及要插入的字符。例如:select'ñ',dump('ñ')from dual;轉儲功能將爲您提供價值。在我的情況下,241. – Rene

+0

Typ = 96 Len = 1:110 – DevDav

2

簡單的方法是,使用ASCII()找出字符的ASCII並插入使用CHR()轉換回字符串。

SQL:

select ascii('ñ'),chr(50097) from dual; 

輸出:

ASCII('Ñ') CHR(50097) 
---------- ---------- 
    50097 ñ  

您使用連接到數據庫的事務客戶端。有些客戶不支持這些字符。

2

您啓動SQL * Plus中必須設置代碼頁之前(使用chcp命令),並相應NLS_LANG環境參數:

chcp 1250 
set NLS_LANG=.EE8MSWIN1250 
sqlplus ... 

但是在評論已經給時,Windows 1250不支持字符ñ。所以,這些值將不起作用。

將這些值設置爲等於數據庫字符集不是強制性的,但是代碼頁和NLS_LANG必須匹配,即下面的人應該工作以及(因爲它們都支持ñ

chcp 1252 
set NLS_LANG=.WE8MSWIN1252 
sqlplus ... 

chcp 850 
set NLS_LANG=.WE8PC850 
sqlplus ... 

再次,EE8MSWIN1250不支持字符ñ,除非你列的數據類型爲NVARCHAR2(RESP。NCLOB)不可能將ñ存儲在數據庫中。

+0

列類型是NVARCHAR2 – DevDav

+1

好的,沒關係。無論如何'.EE8MSWIN1250',其中'chcp 1252'不起作用 - 不是由於數據庫限制,但是您的SQL * Plus將無法使用這些設置將這些字符發送到數據庫。 –

+1

由於您使用dbForge作爲客戶端'chcp ...'很可能對您無效。檢查您的dbForge客戶端中的編碼設置。但是,仍然需要正確設置環境變量'NLS_LANG'。 –