我的数据库是这个字符集
1 NLS_CHARACTERSET AL32UTF8
2 NLS_NCHAR_CHARACTERSET AL16UTF16
数据库字符集是Unicode(AL32UTF8)时,建表
create table AA
(
A VARCHAR2(2) default '是',
B NUMBER(12) not null);
为什么会报ORA-01401:插入的值对于列过大???
为什么改成这个就可以
create table AA
(
A VARCHAR2(3) default '是',
B NUMBER(12) not null);
这样就可以,为什么?????
如果需要从1 NLS_CHARACTERSET ZHS16GBK
2 NLS_NCHAR_CHARACTERSET AL16UTF16
这种字符集导入到我的库中该怎么导入,谢谢
1 NLS_CHARACTERSET AL32UTF8
2 NLS_NCHAR_CHARACTERSET AL16UTF16
数据库字符集是Unicode(AL32UTF8)时,建表
create table AA
(
A VARCHAR2(2) default '是',
B NUMBER(12) not null);
为什么会报ORA-01401:插入的值对于列过大???
为什么改成这个就可以
create table AA
(
A VARCHAR2(3) default '是',
B NUMBER(12) not null);
这样就可以,为什么?????
如果需要从1 NLS_CHARACTERSET ZHS16GBK
2 NLS_NCHAR_CHARACTERSET AL16UTF16
这种字符集导入到我的库中该怎么导入,谢谢
所以报列过大
我觉的应该是这样子的
以确认,某些字符是否能够转,或者还是手工来转.
使用nvarchar2 定义nvarchar2(3); 存储3个字符,使用unicode,最多存储2000个字符。
作为对比
使用varchar2 定义VARCHAR2(3 Byte); 存储3个字节,使用数据库默认字符集,和VARCHAR2(3 char) 的区别在于,最多存储3字节内容而不是3字符。VARCHAR2(Byte)就是普通的varchar2()。
使用char 定义char(3); 存储3个字节,使用数据库默认字符集,和varchar2(3 Byte)的区别在于,无论存储的字符长度如何存储空间都是固定的3个字节。varchar2(byte)不考虑,因为需要大量修改倒入脚本,计算字节长度。
char也不考虑,不仅要计算字节长度,还会浪费存储空间。对于是使用varchar2(char)还是nvarchar2,就要看他们的区别了,varchar2(char)使用数据库默认字符集保存数据,对于你的例子就是使用utf8保存数据,每个字符占三个字节。
nvarchar2使用unicode保存数据,每个字符占两个字节。无论使用哪个都要修改建表的脚本。