2014-04-25 52 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個字符長度的列。