我是 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/