【问题标题】:Converting data_type of many fields from bit to tinyint将许多字段的 data_type 从 bit 转换为 tinyint
【发布时间】:2012-05-19 16:06:01
【问题描述】:

以下查询是转换字段数据类型的可接受方式吗?

UPDATE INFORMATION_SCHEMA.COLUMNS 
SET `COLUMNS`.`DATA_TYPE` = 'tinyint'
WHERE
`COLUMNS`.`TABLE_SCHEMA` = 'BAR' 
AND `COLUMNS`.`TABLE_NAME` = 'FOO'
AND `COLUMNS`.`DATA_TYPE` = 'bit'

我应该关注数据完整性还是将存储为 bit 的数据毫无问题地转移到 tinyint?

【问题讨论】:

  • 好吧,如果数据完整性没有问题,我可以一口气把我所有的表都改得这么好......
  • 成功了吗?计划做同样的事情。
  • 无法确认安全性所以没有这样做。

标签: mysql bit tinyint


【解决方案1】:

这样不行。不允许在 INFORMATION_SCHEMA 数据库上执行 UPDATE、DELETE、INSERT 操作。

Here's why.

【讨论】:

    【解决方案2】:

    您不能直接修改元数据表(它们实际上是视图,但在这种情况下区别并不重要),但您可以使用它们来生成您的 alter table 语句,如下所示:

    SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME + ' ALTER COLUMN ' + COLUMN_NAME + ' TINYINT' + CASE WHEN IS_NULLABLE = 'YES' THEN ' NULL;' ELSE ' NOT NULL;' END
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE `COLUMNS`.`TABLE_SCHEMA` = 'BAR' 
    AND `COLUMNS`.`TABLE_NAME` = 'FOO'
    AND `COLUMNS`.`DATA_TYPE` = 'bit'
    

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 2021-01-09
      • 2018-07-30
      • 2016-08-21
      • 2014-11-02
      • 2018-12-17
      相关资源
      最近更新 更多