MySQL查询修改表字段
查询所有字段类型:
select table_name,column_name,column_comment,data_type
from information_schema.columns
where table_name='查询表名称' and table_schema='数据库名称';
修改1个字段的数据类型:
ALTER TABLE 表名称 MODIFY 字段名称 TEXT;
生成批量修改sql:
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
COLUMN_TYPE,
CONCAT( 'ALTER TABLE ',TABLE_NAME,' MODIFY ', COLUMN_NAME, ' char(1);' )
FROM
information_schema.COLUMNS
WHERE
table_schema = '数据库名称'
AND DATA_TYPE='enum';
修改字段的编码方式:
alter table 表名 modify 字段名 字段类型 CHARACTER SET utf8;
生成批量sql:
SELECT
TABLE_NAME,
COLUMN_NAME,
CHARACTER_SET_NAME,
CONCAT( 'ALTER TABLE ',TABLE_NAME,' MODIFY ', COLUMN_NAME,' ', COLUMN_TYPE,' CHARACTER SET utf8;' )
FROM
information_schema.COLUMNS
WHERE
table_schema = '数据库名称'
AND CHARACTER_SET_NAME='utf16le';
最终版:
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
COLUMN_TYPE,
COLUMN_DEFAULT,
CONCAT( 'ALTER TABLE ',TABLE_NAME,' MODIFY ', COLUMN_NAME, ' char(1) CHARACTER SET utf8 DEFAULT "',ifnull(COLUMN_DEFAULT,''),'";' )
FROM
information_schema.COLUMNS
WHERE
table_schema = '数据库名称'
AND DATA_TYPE='enum';
//经测试,不会更改原有的数据
//注意,只用于批量生成sql语句,生成的语句是用于需要修改的数据库,不是information_schema——这个数据库不能修改;???
//另外,生成的sql语句要注意一下字段长度,有的不是一个字符,需要修改一下。??
//crop_info表中的多个字段是utf8mb4编码格式,也是mysql独有的。
SELECT
TABLE_NAME,
CHARACTER_SET_NAME,
COLUMN_NAME,
DATA_TYPE,
COLUMN_TYPE,
COLUMN_DEFAULT,
CONCAT( 'ALTER TABLE ',TABLE_NAME,' CHANGE ', COLUMN_NAME,' ',COLUMN_NAME,' ',COLUMN_TYPE, ' CHARACTER SET utf8;' )
FROM
information_schema.COLUMNS
WHERE
table_schema = '数据库名称'
AND CHARACTER_SET_NAME='utf8mb4';
方法同上。??