【问题标题】:Increase varchar() size of all columns in a table?增加表中所有列的 varchar() 大小?
【发布时间】:2014-06-04 23:01:43
【问题描述】:

我们可以通过以下方式修改 varchar() 的大小:

ALTER TABLE *table* MODIFY *column name* VARCHAR(1000);

有没有办法为表的所有列发出这个命令?

【问题讨论】:

  • 你的表有多少列?我不会认为这是需要自动化的事情,我当然不会认为这会定期发生 - 为什么不手动进行呢?如果您愿意,我相信您可以设置一个存储过程来执行此操作并使用 EXPLAIN 查询遍历列。
  • 25 列。这不是很多,但对于较大的桌子来说可能很乏味。

标签: mysql alter


【解决方案1】:

是的,您可以在一个 ALTER 语句中修改多个列:

ALTER TABLE *table* 
    MODIFY *columnname1* VARCHAR(1000), 
    MODIFY *columnname2* VARCHAR(1000), 
    MODIFY *columnname3* VARCHAR(1000),
    ...etc...;

在一个子句中没有“修改所有 varchar 列”的语法。

但是你可以生成像上面这样的详细查询:

SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` ',
    GROUP_CONCAT(CONCAT('MODIFY COLUMN `', COLUMN_NAME, '` VARCHAR(1000)')), ';') AS _alter
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (TABLE_SCHEMA, TABLE_NAME) = ('mydatabase', 'mytable')
  AND COLUMN_TYPE LIKE 'VARCHAR%'
GROUP BY TABLE_SCHEMA, TABLE_NAME;

保存该查询的输出并将其作为 SQL 脚本执行。

【讨论】:

  • 谢谢,比尔。详细查询对我有很大帮助,同时将大量表迁移到 utf8mb4 并将 varchar 255 减少到 191。
猜你喜欢
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2014-06-15
  • 2012-10-19
  • 2010-09-15
  • 2015-02-06
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多