2014-04-25 50 views
1

我正在测试最近转换的数据库为UTF-8。如果我使用长的随机UTF-8字符插入到一个VARCHAR2场(4000个字符),我得到: [ORA-01704:字符串文本太长使用长UTF-8字符集]ORA-01704:字符串文字太长使用长UTF-8字符集

如果我把绳剪断下来到约3600个字符,它的作品。是什么赋予了?有没有办法插入我的4000个字符?

请注意,字符串中有一些非常奇怪的字符。

谢谢。

+0

无论您是否用'char'语义或'byte'语义声明''varchar'列不能超过4000 ***个字节***。这已经改变了12c,你可以配置数据库以允许32K。 –

+0

数据库中是否有任何实际上是4000字节的字符串?如果没有,那么目前它并不重要,是吗?你的测试失败了,你现在知道为什么,但是你不需要它。 – Ben

+0

很多很多4000字符的字段。 – RickyD

回答

1

From the documentation

独立地字符的最大长度的,VARCHAR2数据的长度不能超过4000个字节。

所以声明为varchar2(4000 [char])的字段可以容纳4000个单字节字符或更少数量的多字节字符。你无法绕过这一点,至少直到12c时varchar2支持高达32k。

如果您确实需要在11g或更早版本中允许4000个多字节字符,您需要将该列创建为可容纳千兆字节数据的CLOB。 (你可能也想要read more on LOB storage)。

+0

谢谢。 既然走CLOB或C12路线是不可能的,那么我的选择是柠檬或酸橙(当我达到糖碗)。 – RickyD

+0

或者龙舌兰酒......正如本文中提到的,如果你有真正的多字节值并且变得很长,这只会是一个问题;但是如果你没有,我想我会有一个更小的场地。 –

+1

但是,当@RickyD正在迁移到UTF-8数据库时,假设有4,000个字符列被重新创建为4,000个字符(即16,000字节)列,但旧数据库中的数据仍然存在4,000字节Alex。如果实际上需要在数据库中插入超过4,000字节的数据,它只会成为一个问题。目前,似乎并不存在。值得认真研究的是,迁移所有使用CLOB的代码将会非常糟糕,并且对应用程序有巨大的影响(因此您以后也不希望这样做)。 – Ben

0

更好您更改列的数据类型为CLOB

1

单个UTF-8字符超过1个字节。 Oracle有4000个字节的限制。因此少于4000个UTF-8字符将适合4000个字符长度的列。