我可以在不影响现有数据的情况下将列从VARCHAR更改为VARCHAR FOR BIT DATA吗?



我使用以下查询来更改列类型,这在我的示例表

上似乎很好

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>
  • 行溢出
  • 使用
  • 列的例程
因此,最好使用生产数据在非生产数据库中测试该更改,以验证它不会产生任何影响。

最新更新