Database 我是否可以在不影响现有数据的情况下,将位数据的列从VARCHAR更改为VARCHAR

Database 我是否可以在不影响现有数据的情况下,将位数据的列从VARCHAR更改为VARCHAR,database,db2,Database,Db2,我使用下面的查询来更改列类型,这在我的示例表中似乎很好 改变工作台温度 位数据的ALTER COLUMN Col SET数据类型VARCHAR(15) 去 在将其用于生产数据之前,我希望确保它不会对现有数据产生任何问题 不能说这不会造成任何问题。这些问题取决于您当前的数据模型:当前表DDL。你必须检查很多东西: 储藏 交易 行溢出 使用列的例程 因此,最好用生产数据测试非生产数据库中的更改,以验证它不会产生任何影响。tl;博士: 将位数据的列从VARCHAR(15)更改为VARCHAR(1

我使用下面的查询来更改列类型,这在我的示例表中似乎很好

改变工作台温度 位数据的ALTER COLUMN Col SET数据类型VARCHAR(15) 去


在将其用于生产数据之前,我希望确保它不会对现有数据产生任何问题

不能说这不会造成任何问题。这些问题取决于您当前的数据模型:当前表DDL。你必须检查很多东西:

  • 储藏
  • 交易
  • 行溢出
  • 使用列的例程
因此,最好用生产数据测试非生产数据库中的更改,以验证它不会产生任何影响。

tl;博士:

将位数据的列从
VARCHAR(15)
更改为
VARCHAR(15)
不会修改表中的数据。但是,返回的数据的表示形式将更改


当您将一行插入到具有
VARCHAR()
列的表中时,DB2将您从客户机应用程序的代码页插入的数据转换为数据库的代码页(如果它们不同),然后将数据写入表中。查询该数据时,DB2从
VARCHAR()
列中获取字节字符串,并使用数据库代码页生成字符

当您对位数据使用
时,DB2将数据流写入列中,而不使用任何代码页。它只是写入字节流。当查询数据时,DB2将以十六进制字符串的形式返回字节流

因此,如果在
VARCHAR(15)
列中插入
'Hello'
,则在内部将其存储为5个字节:
x'48656C6C6F
”(假设为UTF8代码页)。查询此列时,DB2根据UTF8代码页将这5个字节转换回
'Hello'

但是,如果将位数据的列更改为
VARCHAR(15)
,那么在查询数据时,DB2将返回未编码的字节字符串:
x'48656c6f'

因此:虽然数据本身不会改变,但查询列时得到的结果会改变


最后注意:将位数据的列更改为
VARCHAR(15)是单向操作。一旦去掉与列中数据相关联的代码页,DB2将始终以字节流的形式返回数据,即使您更改列并删除位数据的
子句。

Hi@user3391293!我不知道你对这些惯例有多习惯,但如果其中一个答案帮助你解决了问题,那么最好将其标记为“已接受”。这将帮助像你一样有同样问题的人。此外,你和回答者也获得了一些声誉。谢谢