【问题标题】:Can I alter a column from VARCHAR to VARCHAR FOR BIT DATA without affecting the existing data我可以在不影响现有数据的情况下将列从 VARCHAR 更改为 VARCHAR FOR BIT DATA
【发布时间】:2014-08-07 09:29:58
【问题描述】:

我正在使用以下查询来更改列类型,这在我的示例表上看起来不错

更改表温度 ALTER COLUMN Col SET DATA TYPE VARCHAR(15) FOR BIT DATA 去

在我的生产数据上使用它之前,我想确保它不会对现有数据造成任何问题。

【问题讨论】:

  • 嗨@user3391293!我不知道您对这些约定有多少习惯,但是如果其中一个答案可以帮助您解决问题,最好将其标记为“已接受”。这将帮助像你一样有同样问题的其他人。此外,您和回答者获得了一些声誉。谢谢!

标签: database db2


【解决方案1】:

不能说它不会产生任何问题。这些问题取决于您当前的数据模型:当前表 DDL。你必须检查很多事情:

  • 存储
  • 交易
  • 行溢出
  • 使用列的例程
  • ...

因此,最好使用生产数据在非生产数据库中测试该更改,以验证它不会产生任何影响。

【讨论】:

    【解决方案2】:

    tl;博士:

    将列从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 子句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      相关资源
      最近更新 更多