有什么方法可以改变列名的大小写。我需要这样做,因为我有几个表,其中一些表的列名全部为大写,其中一些列名全部为小写,或者表具有大小写列名的组合。
任何输入都会有很大帮助。
谢谢,马纳西
您可以使用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';