有什么办法可以改变mysql中所有表的列名的大小写

时间:2011-03-09 05:02:42

标签: mysql rename names

有没有办法可以改变列名的情况。我需要这样做,因为我有几个表,其中一些表的列名全部为大写,其中一些列的名称全部为小写,或者表有大写和小写列名称的组合。

任何输入都会有很大的帮助。

谢谢, 玛纳斯

1 个答案:

答案 0 :(得分:2)

您可以使用ALTER TABLE重命名表格,并从information_schema.columns中选择以获取您不想要的任何命名方案的列。将这些与动态SQL(您可以将PREPARE用于此目的)或脚本组合以生成和执行SQL语句。但是,SQL通常不区分大小写,因此这些更改将是装饰性的。

生成列重命名查询的未经测试的示例(生成的查询可能会删除列属性):

-- before use:
-- * change regexp to match columns to rename
-- * change collation to match table/column default
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, 
              '` CHANGE `', column_name, '` `', LOWER(column_name), '` ', column_type,
              IF(IS_NULLABLE='NO',' NOT NULL',''),
              IF(column_default <> '', CONCAT(' DEFAULT ', column_default), ''), 
               ' ', extra )
  FROM information_schema.columns
  WHERE column_name REGEXP '^[A-Z]' COLLATE utf8_bin
    AND table_schema <> 'information_schema';

-- or:
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, 
              '` CHANGE `', column_name, '` `', LOWER(column_name), '` ', column_type,
              IF(IS_NULLABLE='NO',' NOT NULL',''),
              IF(column_default <> '', CONCAT(' DEFAULT ', column_default), ''), 
               ' ', extra )
  FROM information_schema.columns 
  WHERE LEFT(column_name, 1) = UPPER(LEFT(column_name,1)) COLLATE utf8_bin 
    AND table_schema != 'information_schema';