2015-04-14 77 views
0

我有DB2數據庫,而且我已經定義了帶有varchar(x)的表格,但似乎x - 不是字符數,而是字節數。是否有可能以某種方式動態解決問題?或者我應該更新我的表格?DB2 UTF8存儲配置

+0

我不認爲這是一個「問題」 - 它是有據可查的行爲。答案取決於您未指出的DB2版本和平臺。 – mustaccio

+0

db2 v10.5,我在Win上運行它。我讀過,我可以使用VARGRAPHIC –

回答

0

UTF-8字符可以用長度爲1到4個字節的字節序列表示,所以不可能事先知道包含x Unicode字符的UTF-8字符串的最大字節長度。

從DB2 10.5修訂包4(所謂的「坎昆版本」)開始,您可以在定義列時specify string length unitsVARCHAR(x OCTETS)將表示x字節; VARCHAR(x CODEUNITS16)意味着x個雙字節字符,並且VARCHAR(x CODEUNITS32)意味着x個四字節字符。

如果不明確指定單位,則缺省值將從string_units數據庫配置參數和NLS_STRING_UNITS全局變量中導出。

GRAPHIC and VARGRAPHIC儘管數據類型的默認單位是2字節字符,但不是八位位組,但數據類型也受制於相同的單位規範。

注意,字符和CLOB列仍受到相同的長度的限制如前:例如,一個VARCHAR列的最大長度是32672個字節(OCTETS),或16336 CODEUNITS16,或8168 CODEUNITS32

+0

所以基本上我需要設置字符串單位的CODEUNITS32,對嗎? –

+0

我不能告訴你你需要做什麼,因爲我不知道你的要求。我希望我提供的信息能幫助你做出決定。 – mustaccio

+0

我已經安裝了fx4並將string_utils設置爲codeunit32,因此它現在可以工作,謝謝! –