Oracle中默认的数据类型varchar2、CHAR或BYTE是什么?

问题描述 投票:0回答:1

在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 ...但是我没有找到明确的答案。

oracle plsql types rdbms varchar2
1个回答
0
投票

输入这个问题后,我决定我可以自己回答它。 我对字符集等做了更多研究......但仍然没有得到任何非常有价值的信息。

答案是 BYTE 是默认值。

这就是我为解决这个问题所做的事情:

  1. 制作了一个包含 3 列的表,每列使用 3 种不同方式之一来表示 varchar2 列数据类型(遵循的代码)
  2. 以各种方式将数据插入到该表中
  3. 首先,我尝试将“123456789012345”插入到每个中,作为对照......这对所有 3 个都有效(如预期)
  4. 接下来,我将“1234567890123456”插入到每个...所有 3 个都给出了 ORA-12899 错误:值对于列来说太大...
  5. 最后我使用了一个多字节字符,并尝试在每个字符中输入 15 个。结果是来自默认值 (varchar2(15)) 和指定的 BYTE (varchar2(15 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('æææææææ','æææææææææææææææ','æææææææ');
© www.soinside.com 2019 - 2024. All rights reserved.