用于UTF-8字符集/编码的Oracle 10g列宽(字节大小)

时间:2012-10-31 17:00:40

标签: encoding utf-8 character-encoding oracle10g

在字符集和编码方面,我仍然有点陌生,所以我提前为任何误解道歉。

我正在使用Oracle 10g作为我的Web应用程序的DBMS。我的数据库配置为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 多字节字符?

1 个答案:

答案 0 :(得分:3)

创建列时,需要指定字符长度语义,如下所示:

test_column varchar2(1500 char)

您可以通过NLS_LENGTH_SEMANTICS设置默认值。由于服务器或会话参数,您的脚本可能在不同的环境中正常工作。但是明确设置每一列可能更好。