2017-03-27 17 views
0

oracleにNVarchar列のテーブルがあります。値の下に挿入すると、他の文字に変換されました。OracleのNvarchar列に値を格納する際の問題

Insert INTO tbltest (CONTENT) Values(N'✓ à la mode δ') 
Select * From tbltest 

CONTENT 
-------------------- 
¿ à la mode d 

ので、私はお勧めdata.Pleaseのこのタイプを保存するために取るべきデータ型。

+0

このコマンドを呼び出すツールはどれですか? –

+0

Oracle SQL Developer。同じことがC#コードでテーブルからデータを取得するときに発生しました。 –

+0

C#で使用するプロバイダ/ドライバはどれですか? ODBC? OleDB? ODP.NET?、...? –

答えて

0

私は正確な解決策はわかりませんが、ツール - >環境設定 - >環境 - >エンコーディングの設定を確認してください。

文字をサポートするエンコードを選択します(例: UTF-8

あなたのC#のコードについて:Oracleのため

のMicrosoft .NET Frameworkデータプロバイダーを使用すると、新しいプロジェクトでそれを使用しないでください、長年にわたってdeprecatedです。開発は20年前に止まったと思います。したがって、Unicode文字はサポートされていません。使用できません。

例えば、現代のプロバイダを使用してくださいOracle Data Access Components (ODAC) for Windows Downloads

「Oracle Data Provider for .NET」の場合、これらの文字をサポートするエンコーディングにはNLS_LANGを設定する必要があります。例えば.AL32UTF8NLS_LANGを環境変数またはレジストリにHKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG(32ビット用)と設定することができます。 HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG(64ビット用)

他のプロバイダ(ODP.NET Managed DriverまたはOracle OraOLEDBなど)は、NLS_LANGに影響されません。

詳細はこちらOdbcConnection returning Chinese Characters as "?"

+0

Wernfried Domscheitに感謝します。文字セットを変更した後、正常に動作しています。 –

+0

文字セットをWE8MSWIN1252からAL32UTF8に変更した後、既存のclob列データは他の言語に変換されます。瑯捫數灥捴敤晦睤慴攧㸼⅛䍄䅔䅛嵝㸼⽄ように見えますし、コードでは、以前にそれが保存されているよう取り戻すではありません。 –

+0

どのように選択しますか?同じツールで? –

-1


これは、表示されているNLS_CHARACTERSET、NLS_NCHAR_CHARACTERSETデータベース設定およびクライアントのNLS_LANG設定によるものです。

あなたの価値はあなたの言語に固有の特殊文字を持っているとして、あなたはそれを使用して設定する必要があります。以下のように

+0

あなたは '' ALTER SESSION'とNLS_LANG'を設定することはできません。環境変数またはレジストリに設定する必要があります。 –

関連する問題