sql >> データベース >  >> RDS >> Oracle

Oracleデータベーステーブルの列の文字セットの定義

    簡単な答えは、MySQLとは異なり、文字セットは列(またはテーブル)レベル Latin1 も有効なOracle文字セットではありません。

    文字セットはデータベース全体で一貫しており、データベースの作成時に指定されています。 NLS_DATABASE_PARAMETERS

    select value
      from nls_database_parameters
     where parameter = 'NLS_CHARACTERSET'
    

    可能な文字セットの完全なリストは、11gで入手できます。 r2 および9iの場合 または、 V $NLS_VALID_VALUES<をクエリできます。 / code>

    ALTERSESSIONを使用できます。 ステートメント NLS_LANGUAGEを設定します またはNLS_TERRITORY 、しかし残念ながら、文字セットに対してこれを行うことはできません。これは、言語を変更すると、Oracleが表示する方法が変わるためだと思います。 保存されたデータに対して文字セットを変更すると、Oracleの保存方法が変更されます。 データ。

    もちろん、データを表示するときに、使用しているクライアントで必要な文字セットを指定できます。

    文字セットの移行 簡単な作業ではないので、軽く行うべきではありません。

    ちょっとした注意点として、なぜラテン語1を使おうとしているのですか? UTF-8(別名 AL32UTF8 )のようなもので新しいデータベースをセットアップするのがより一般的です。 - UTF8は使用しないでください )またはUTF-16を使用すると、マルチバイトデータを効果的に保存できます。今は必要ない場合でも、将来的に移行する必要なしにデータベースを将来にわたって保証することを試みるのが賢明です-人生の保証はありません-

    データベース内の列ごとに異なる文字セットを指定する場合は、この要件が本当に必要かどうかを判断して、削除することをお勧めします。どうしても必要な場合は、すべての潜在的な文字セットのスーパーセットである文字セットを使用するのが最善の策かもしれません。次に、列を特定の16進値に制限するある種のチェック制約を設定します。私はこれを行うことをまったくお勧めしません。間違いが忍び寄る可能性は非常に大きく、非常に複雑です。さらに、文字セットが異なれば、16進値も異なります。これは、列が特定の文字でレンダリングされるように強制する必要があることを意味します。これは、データベースの範囲外であるため不可能です。

    1。状況を知りたいのですが




    1. Javascriptを介してMySQLクエリを渡す

    2. mysqlの2つの連続する行の違い

    3. RoomPersistenceLibraryをAndroidプロジェクトにインポートする方法

    4. MySQLクエリを記述して、必要な結果を取得します