SQL中char数据类型的差异

时间:2014-05-26 04:52:26

标签: sql oracle

Oracle中char(1)char(1 byte)之间有什么区别吗? 例如:

create table aaa(flag char(1));

create table aaa(flag char(1 byte));

在第一个示例中,我没有提到字节或字符。因此默认值为BYTE或CHARACTER?

1 个答案:

答案 0 :(得分:2)

取决于NLS_LENGTH_SEMANTICS的设置。根据文档,默认为BYTE

根据此设置,

之间存在重大差异
CHAR(1 CHAR)

CHAR(1 BYTE)

前者允许存储1个字符,包括需要多个字节进行编码的字符,而后者仅允许1个字节的存储空间,并且无法存储需要2个或更多字节进行编码的字符。

因此,使用*CHARBYTE明确限定CHAR字段的大小始终是个好主意

以下显示存储的不同之处。

CREATE TABLE SomeTable
(
  Char1 CHAR(1 CHAR),
  Char2 CHAR(1 BYTE)
);

INSERT INTO SomeTable(Char1, Char2) VALUES('A', 'A');

INSERT INTO SomeTable(Char1, Char2) VALUES('Й', 'Й'); -- Insert into Char2 fails