2

我想在Oracle数据库中插入汉字。

select length('有个可爱的小娃在旁边') from dual;
10
drop table multibyte;
create table multibyte (name varchar2(10));
insert into multibyte
values('有个可爱的小娃在旁边');

我收到一条错误消息说

           An attempt was made to insert or update a column with a value
           which is too wide for the width of the destination column.
           The name of the column is given, along with the actual width
           of the value, and the maximum allowed width of the column.
           Note that widths are reported in characters if character length
           semantics are in effect for the column, otherwise widths are
           reported in bytes

我知道,如果我增加列宽,问题就会消失。我的问题是当长度函数告诉我宽度是 10 为什么我不能将它插入到 varchar2(10) 的列中?

4

2 回答 2

6

不同之处在于列的定义:VARCHAR2(10)等同于VARCHAR2(10 BYTE),而您想要的是VARCHAR2(10 CHAR).

列数据类型中 BYTE 和 CHAR 的区别

于 2012-11-22T03:19:27.013 回答
1

是的,这有点不幸。Oracle 以字节为单位测量文本列的长度,因此一个 varchar2(10) 只能存储十个字节,大约是三个汉字。

于 2012-11-22T03:18:37.677 回答