Oracle中char(1)
和char(1 byte)
之间有什么区别吗?
例如:
create table aaa(flag char(1));
和
create table aaa(flag char(1 byte));
在第一个示例中,我没有提到字节或字符。因此默认值为BYTE或CHARACTER?
答案 0 :(得分:2)
取决于NLS_LENGTH_SEMANTICS
的设置。根据文档,默认为BYTE
。
根据此设置,
之间存在重大差异CHAR(1 CHAR)
和
CHAR(1 BYTE)
前者允许存储1个字符,包括需要多个字节进行编码的字符,而后者仅允许1个字节的存储空间,并且无法存储需要2个或更多字节进行编码的字符。
因此,使用*CHAR
或BYTE
明确限定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