1

文字セットとエンコーディングに関しては、私はまだ少し見知らぬ人なので、私の誤解については事前にお詫び申し上げます。

Web アプリケーションの DBMS として Oracle 10g を使用しています。私のデータベースは UTF-8 に設定されています。

データベース情報:

SQL> SELECT * FROM NLS_DATABASE_PARAMETERS

PARAMETER                      VALUE
------------------------------ --------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               UTF8
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         UTF8
NLS_RDBMS_VERSION              10.2.0.3.0

幅制限が1500の列を含むデータベース テーブルがあります。

テーブルの詳細:

COLUMN_NAME                    DATATYPE
------------------------------ --------------------------------
TEST_COLUMN                    VARCHAR2(1500 BYTE)

初心者の私は最初、列に設定された1500の制限がCHARACTERの数の単位であると思っていましたが、後で実際にはBYTEの数の単位であることがわかりました。

私が目指しているのは、文字数を1500に制限することです。したがって、設定VARCHAR2(1500)はシングルバイトエンコーディングにのみ適用されます。

マルチバイト エンコーディングを使用する UTF-8 を使用しているため、列幅を1500のマルチバイト文字に制限する正しい値を設定するにはどうすればよいでしょうか?

4

1 に答える 1

3

列を作成するときは、次のように文字長セマンティクスを指定する必要があります。

test_column varchar2(1500 char)

NLS_LENGTH_SEMANTICSを介してデフォルトを設定できます。サーバーまたはセッションのパラメーターが原因で、スクリプトが別の環境で正しく機能した可能性があります。ただし、各列を明示的に設定する方がよいでしょう。

于 2012-10-31T20:14:53.630 に答える