2011-03-09 71 views
0

有沒有什麼辦法可以改變我的列名的情況。我需要這樣做,因爲我有幾個表,其中一些列名全部以大寫形式存在,而其中一些列名全部以小寫形式存在,或者表中有大小寫字母列名的組合。有沒有什麼辦法可以改變mysql中所有表的列名大小寫的情況下

任何輸入將是一個很大的幫助。

感謝, 瑪納斯

+2

你爲什麼要這麼做? SQL查詢中的列名不會有任何影響。 – Garbage 2011-03-09 05:11:55

+0

對MySQL的+1不區分大小寫。 – philwinkle 2011-03-09 06:22:16

回答

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'; 
+0

是的你是對的。我只是希望列以適當的方式存儲並以標準方式存儲。 – 2011-03-09 05:24:05

相關問題