在oracle中,您显然可以指定是否希望将varchar2数据类型长度表示为字节长度或字符长度。
varchar2(10 byte)
与
varchar2(10 char)
我的问题是,如果我不指定'byte'或'char',但我指定了长度,默认长度是char还是byte?
varchar2(10)
注意:以下测试显示 varchar2(10) 在尝试保存超过 10 个标准字符时。
DECLARE
varchar2_10 varchar2(10);
BEGIN
varchar2_10 := '1234567890'; -- THIS works
-- varchar2_10 := '1234567890123' -- THIS generates an error.
END
我相信默认值是 CHAR ...但是我没有找到明确的答案。
输入这个问题后,我决定我可以自己回答它。 我对字符集等做了更多研究......但仍然没有得到任何非常有价值的信息。
答案是 BYTE 是默认值。
这就是我为解决这个问题所做的事情:
因此,似乎默认是BYTE。
代码:
CREATE TABLE XX_DELETE_ME
(
numeric_key NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY
,avarchar2_15 varchar2(15)
,avarchar2_15_char varchar2(15 char)
,avarchar2_15_byte varchar2(15 byte)
);
-- error on avarchar2_15
INSERT INTO XX_DELETE_ME(avarchar2_15, avarchar2_15_char, avarchar2_15_byte)
VALUES('æææææææææææææææ','æææææææææææææææ','æææææææææææææææ');
-- error on avarchar2_15_byte
INSERT INTO XX_DELETE_ME(avarchar2_15, avarchar2_15_char, avarchar2_15_byte)
VALUES('æææææææ','æææææææææææææææ','æææææææææææææææ');
-- no error
INSERT INTO XX_DELETE_ME(avarchar2_15, avarchar2_15_char, avarchar2_15_byte)
VALUES('æææææææ','æææææææææææææææ','æææææææ');