在字符集和编码方面,我仍然有点陌生,所以我提前为任何误解道歉。
我正在使用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 多字节字符?
答案 0 :(得分:3)
创建列时,需要指定字符长度语义,如下所示:
test_column varchar2(1500 char)
您可以通过NLS_LENGTH_SEMANTICS设置默认值。由于服务器或会话参数,您的脚本可能在不同的环境中正常工作。但是明确设置每一列可能更好。