2016-09-14 43 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