【问题标题】:changing datatype in the entire database更改整个数据库中的数据类型
【发布时间】:2014-05-18 01:38:27
【问题描述】:

我错误地在 MySQL 中创建了数据类型为 int(200)varchar(200)double(200,2) 的表。现在我想把它改成int(20)varchar(20)double(20,2)。由于数据库非常大,一个一个地改变它们是一项非常非常困难的任务。我不确定,但我认为遵循 SQL 可以做到-

UPDATE INFORMATION_SCHEMA.COLUMNS
SET COLUMN_TYPE='INT(20)'
WHERE COLUMN_TYPE='INT(200)'
  AND TABLE_SCHEMA = 'DATABASE_NAME';

它能解决我的问题吗?这样做安全吗?

提前致谢。

【问题讨论】:

  • 如果您可以更新 information_schema 视图,我会感到惊讶。但是 MySQL 不止一次让我感到惊讶。
  • 首先有人请告诉我使用 int(200), varchar(200), double(200,2) 有错吗????????
  • int(200) 指定显示宽度为 200 位的整数。显示宽度不会影响您可以存储在整数中的值的范围。 double(200, 2) 表示最多存储 200 位浮点数,其中 2 位可能在小数点右侧。这确实会影响您可以在双精度中存储的内容; double(5,0) 不允许,例如 123456。到处使用 200 告诉我你不知道这些值的作用,而且你没有阅读文档。
  • 那么 varchar(200) 呢???
  • 你看到我上面写的结尾了吗? “到处使用 200 告诉我你不知道这些值的作用,而且你没有阅读文档。”如果您想留下好印象,请使用搜索引擎和read the docs

标签: mysql sql information-schema


【解决方案1】:

ALTER TABLE table_name CHANGE collumn_Name1 collumn_Name2 INT(20) ;

它应该可以工作。

注意:Collumn_name2 是新的列名,如果您不想更改其名称,请键入相同的列名。

【讨论】:

【解决方案2】:

各位

我不会更改我的数据库中的任何内容,因为在阅读了文档后,我相信使用 int(200)、double(200,2)、varchar(200) 没有任何问题,而且它不会根据我的要求,我有什么麻烦。

我仍然想为我原来的问题添加一个解决方案-

我们可以编写一个php脚本来改变整个数据库中的数据类型和下面的代码-

$loop2=$con->query("SELECT COLUMN_NAME, TABLE_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'database_name' AND COLUMN_TYPE = 'int(200)'");

    while ($row2 =mysqli_fetch_array($loop2))
    {
         $row1=$con->query("alter table database_name.$row2[TABLE_NAME] change column $row2[COLUMN_NAME] $row2[COLUMN_NAME] int(20) default '$row2[COLUMN_DEFAULT]'");

    }

【讨论】: