我使用以下查询来更改列类型,这在我的示例表
上似乎很好ALTER TABLE temp为位数据设置VARCHAR(15)类型去
在我的生产数据上使用它之前,我想确保它不会对现有数据产生任何问题。
br:
将列VARCHAR(15)
更改为VARCHAR(15) FOR BIT DATA
将不修改表中的数据。但是,您得到的数据的表示形式将会改变。
当您将一行插入到具有VARCHAR()
列的表中时,DB2将您从客户机应用程序的代码页插入的数据转换为数据库的代码页(如果它们不同),然后将数据写入表中。当您查询该数据时,DB2从VARCHAR()
列中获取字节串,并使用数据库代码页生成字符。
当您使用FOR BIT DATA
时,DB2将数据流写入列,而不需要任何代码页。它只是写字节流。当您查询数据时,DB2以十六进制字符串的形式返回一个字节流。
因此,如果您将'Hello'
插入VARCHAR(15)
列,则内部存储为5字节:x'48656C6C6F
'(假设UTF8代码页)。当您查询该列时,DB2根据UTF8代码页将这5个字节转换回'Hello'
。
但是,如果将列更改为VARCHAR(15) FOR BIT DATA
,那么在查询数据时,DB2将返回未编码的字节字符串:x'48656C6C6F'
因此:虽然数据本身没有改变,但是当您查询列时得到的结果将改变。
最后注意:将列更改为VARCHAR(15) FOR BIT DATA
是单向操作。一旦剥离了与列中的数据关联的代码页,DB2将始终以字节流的形式返回数据,即使更改了列并删除了FOR BIT DATA
子句。
不可能说它不会产生任何问题。问题取决于当前的数据模型:当前表DDL。你必须检查很多东西:
- <
- 存储/gh><
- 事务/gh>
- 行溢出
- 使用 列的例程
- …