2017-03-20 19 views
0

OracleデータベースにñChatacterを挿入する際に問題が発生しました。Oracleデータベースにñ文字を挿入できません

INSERT操作は正常に完了しました。 しかし、SELECTを実行すると、ñの代わりにnが得られます。

select 'ñ' from dual; 

は私 'N' を与える:

また、私は実行に気づきました。

select * from nls_database_parameters where parameter='NLS_CHARACTERSET'; 

は私に 'EE8MSWIN1250'を与えます。

ñを挿入するにはどうすればよいですか? DBの設定を変更しないようにしたいと思います。


私はこの作業を得た唯一の方法はされた:

  1. は、入力がUnicodeのコード表現に
  2. 変更文字列をUnicodeに
  3. 変更エンコーディングその窓-1250エンコーディングと.csvファイルの読み取り(ñが\ 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

データベースと挿入する文字のバイト値を確認してください。例: 'ñ'を選択し、デュアルからダンプ( 'ñ')します。ダンプ機能はあなたに値を与えます。私の場合241 – Rene

+0

Typ = 96 Len = 1:110 – DevDav

2

最も簡単な方法は、可能ASCII()を使用して文字のASCIIを見つけると、文字列に戻って変換するために使用CHR()を挿入します。

SQL:

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

出力:

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

データベースの問題への接続に使用しているクライアント。一部のクライアントは、これらの文字をサポートしません。あなたのSQL * Plusを起動しますが、コードページを設定する必要がする前に、それに応じNLS_LANG環境パラメータ(chcpコマンドを使用して)

2

:既にコメントで与えられるよう

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 ... 

あなたの列のデータ型が NVARCHAR2でない限り、EE8MSWIN1250は、文字 ñをサポートしていません(それぞれ NCLOBñをデータベースに保存することはできません。

+0

カラムタイプはNVARCHAR2 – DevDav

+1

です。これで問題ありません。とにかく '.EE8MSWIN1250'、resp' chcp 1252'は動作しません。データベースの制限ではありませんが、SQL * Plusはこれらの文字をデータベースに送ることができません。 –

+1

dbForgeをクライアント 'chcp ... 'として使用しているので、あなたにとってはおそらく有効ではありません。 dbForgeクライアントのエンコーディング設定を確認してください。しかし、環境変数 'NLS_LANG'を正しく設定する必要があります。 –

関連する問題