0

有什么方法可以改变列名的大小写。我需要这样做,因为我有几个表,其中一些表的列名全部为大写,其中一些列名全部为小写,或者表具有大小写列名的组合。

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

谢谢,马纳西

4

1 回答 1

2

您可以使用ALTER TABLE重命名表,并选择 frominformation_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';
于 2011-03-09T05:14:03.380 回答