将Oracle数据库字符集更改为UTF-8(AL32UTF8)后,某些表中的少数记录被拒绝(在运行导入时)

将Oracle数据库字符集更改为UTF-8(AL32UTF8)后,某些表中的少数记录被拒绝(在运行导入时),oracle,character-encoding,oracle10g,Oracle,Character Encoding,Oracle10g,将Oracle数据库字符集更改为UTF-8(AL32UTF8)后,某些表中的少数记录被拒绝(在运行导入时) 字符集更改为UTF-8,然后重新加载相同的数据转储,以确保支持阿拉伯语字符 导入日志引发的错误如下所示: ORA-12899:列“数据库”“表”“属性”的值太大 (实际值:73,最大值:64) 本的评论很可能是正确的。如果您最初有一个60个字符的字符串,那么在单字节编码中需要60个字节的空间,并且适合使用VARCHAR2(64) 使用多字节编码UTF-8时,同一字符串现在使用73个字节,不

将Oracle数据库字符集更改为UTF-8(AL32UTF8)后,某些表中的少数记录被拒绝(在运行导入时)

字符集更改为UTF-8,然后重新加载相同的数据转储,以确保支持阿拉伯语字符

导入日志引发的错误如下所示:

ORA-12899:列“数据库”“表”“属性”的值太大 (实际值:73,最大值:64)


本的评论很可能是正确的。如果您最初有一个60个字符的字符串,那么在单字节编码中需要60个字节的空间,并且适合使用VARCHAR2(64)

使用多字节编码UTF-8时,同一字符串现在使用73个字节,不能放入VARCHAR2(64),因为VARCHAR2声明的默认单位是字节,而不是字符

您需要从以下位置更改所有字符列:

VARCHAR2(64)
致:


我强烈建议不要使用任何字节长度声明,因为对于验证来说,几乎不可能预测字符串是否适合。作为exmaple,很容易定义一个HTML文本字段,将条目限制为40个字符,因为它有一个用于此目的的属性。但是很难创建相同的,以将条目限制为UTF-8编码中测量的40字节。您希望如何将其传达给用户?(在UTF-8编码中,输入的名称不能超过40字节。)

您的列是字节还是字符语义?如果是字节语义,那么不要忘记UTF-8是一个多字节字符集,这意味着以前的
varchar2(1)
现在必须翻两番。
VARCHAR2(64 CHAR)