【发布时间】:2021-03-21 15:43:26
【问题描述】:
According to spec VARCHAR2(max_size CHAR) 应该存储 max_size 字符。我观察到 Unicode 文本的其他/奇怪行为。
让我们考虑这个例子:
create table test (id varchar2(3 char) not null, primary key (id));
insert into test(id) values('abc');
insert into test(id) values('ффф');
Query 1 ERROR: ORA-12899: value too large for column "TEST"."TEST"."ID" (actual: 6, maximum: 3)
所以 varchar2 3 chars 实际上和 byte 的意思是一样的? 否 :)
create table test (id varchar2(3 byte) not null, primary key (id))
insert into test(id) values('abc')
insert into test(id) values('ффф')
Query 1 ERROR: ORA-12899: value too large for column "TEST"."TEST"."ID" (actual: 18, maximum: 3)
我的问题仍然是如何告诉 Oracle varchar2 长度适用于 Unicode 文本(更准确地说是 UTF8)?
更新:是否可以写下一个 SQL 查询来显示所有长度为字节的表/列?
实际上,我的问题分为两部分,TablePlus 的查询编码不正确,随机列的字节长度(无字符后缀):)
更新 2:感谢@Wernfried Domscheit!
查询显示带有varchar2 的表和列,该长度在bytes 中提供:
SELECT TABLE_NAME, COLUMN_NAME, DATA_LENGTH, CHAR_USED
FROM USER_TAB_COLUMNS WHERE DATA_TYPE = 'VARCHAR2' AND CHAR_USED = 'B'
【问题讨论】:
标签: sql oracle unicode varchar varchar2