2016-09-14 80 views
0

在我的桌子product我有一欄:product_nameVARCHAR型和100尺寸:product_name varchar(100)如何定義VARCHAR列以支持特殊字符?

當我嘗試使用特殊字符插入一個名字像這樣的:

°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%°°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä° 

我得到這個錯誤:

ERROR : org.hibernate.util.JDBCExceptionReporter:78 : logExceptions() : Error for batch element #1: DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=3.57.82 

我的product_name列可以有100個字符,對於''是1個字符。

DB2中是否有另一種類型(varchar除外),將其設置爲product_name列?

因此,我可以執行此查詢:

alter table product alter column product_name set data type otherType(100); 
+0

哪個操作系統和哪個DB2版本?字符和字節是兩種不同的措施。解決方案取決於我的問題的答案或簡單地增加「100」。 – MichaelTiefenbacher

+0

[DB2 VARCHAR unicode數據存儲]的可能重複(http://stackoverflow.com/questions/7385183/db2-varchar-unicode-data-storage) –

+0

@MichaelTiefenbacher,我正在使用DB2 10.5.5 – junior

回答

1

退房的

STRING_UNITS 

數據庫配置參數。您可以使用它將默認字節長度切換爲字符長度。這意味着char(100)將被DB2默認解釋爲100 Bytes。由於unicode數據庫中的字符可以跨越1-4個字節,100個字節不足以存儲100個字符。切換到STRING_UNITS = CODEUNITS32後,定義一個列varchar(100)時會得到100個字符。 所以你不需要另一種類型,但另一個數據庫cfg設置。

+0

@junior - - 注意,這實際上相當於將'product_name'聲明爲'varchar(400個八位字節)',並且它將影響數據庫中的所有表列和SQL PL變量。這對於'VARCHAR'列沒有問題,因爲它們不會分配比所需空間更多的空間,但是'CHAR'列_will_將分配四倍多的空間。 – mustaccio