mysql - 更改整个数据库中列的数据类型 - MySQL

标签 mysql phpmyadmin

我是 MySQL 新手。我设计了一些具有 Char 数据类型的表。现在我想将所有 char 数据类型列更改为 Varchar,并具有 Char 中提到的相应大小。

For example.
Existing - Phone Char(10) 
Expected - Phone Varchar(10)

大约有50多张 table 。我知道如何更改每个表和列的数据类型,但是有没有更好的方法可以一次性更改数据类型。

最佳答案

如果您无法编写脚本来完成这项工作,请编写一个脚本来编写脚本来完成这项工作!

您想要一堆 ALTER TABLE 语句:

SET SESSION group_concat_max_len = 1000000; -- Bumps the limit of 1028
SELECT GROUP_CONCAT(
    CONCAT(
        'ALTER TABLE `',
        table_name,
        '` MODIFY COLUMN `',
        column_name,
        '` VARCHAR(',
        character_maximum_length,
        ')'
    )
SEPARATOR ';\n') your_alter_statements
FROM information_schema.columns
WHERE table_schema = 'concrete'
AND data_type = 'char';

这将导致:

ALTER TABLE `table1` MODIFY COLUMN `col1` VARCHAR(10);
ALTER TABLE `table1` MODIFY COLUMN `col2` VARCHAR(10);
ALTER TABLE `table2` MODIFY COLUMN `col1` VARCHAR(10);
ALTER TABLE `table3` MODIFY COLUMN `col1` VARCHAR(10);
ALTER TABLE `table3` MODIFY COLUMN `col2` VARCHAR(10);

运行它,你就可以早点回家了!

更新:通过添加group_concat_max_len停止截断。根据列长度动态调整长度。

关于mysql - 更改整个数据库中列的数据类型 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622020/

相关文章:

mysql - Cron 设置为使用 crontab 每 5 分钟插入一次数据到表中,但仅在整点插入 (1 :00) not every 5 minutes as expected

mysql - 获取一个表中的记录,排除另一表中的记录

php - Codeigniter 2.2 - 使用左连接和多个 where 子句更新 Active Record

php - 自动将文件备份到另一台服务器?

php - 查找并替换所有表中的引号,MySQL 查询中的列

mysql - 如何在phpmyadmin中导入大sql文件

php - 多数据库迁移提高性能

mysql - 为一列选择具有多个值的行

mysql - 在 PHP 中使用 MySQL40 根据另一个表中的值删除表行

tomcat - 在我的 openshift 域上访问 phpmyadmin 时出现 ERR_SSL_PROTOCOL_ERROR