將現有MySQL資料庫改為大小寫不敏感

2021-09-02 21:23:27 字數 1872 閱讀 7892

摘要: 用過mysql的應該都會注意到,預設情況下,linux下安裝的mysql是大小寫敏感的,也就是說table1和table1可以同時存在。而windows下的mysql卻是大小寫不敏感的,所有表名和資料庫名都會變成小寫。

用過mysql的應該都會注意到,預設情況下,linux下安裝的mysql是大小寫敏感的,也就是說table1和table1可以同時存在。而windows下的mysql卻是大小寫不敏感的,所有表名和資料庫名都會變成小寫。

對於怎麼啟用或者停用mysql資料庫的大小寫敏感,這個網上隨便都能找到,就是改改引數lower_case_table_names,然後重啟即可。

但是,如果我們的資料庫中已經有了多個區分大小寫的資料庫,現在要改為不區分大小寫的,那麼就會報錯:table 'databasename***.tablename***' doesn't exist.

為此,我們需要將mysql改為大小寫敏感的模式,然後去重新命名每個表名和資料庫名。

mysql確實很神奇的一點是不允許重新命名資料庫,所以如果我們要重新命名test1為test1,那麼只有新建乙個test1的資料庫,然後把test1中的表全面rename到test1資料庫中。

而且在rename的過程中,我們也需要將表面從大小寫的形式改為全部小寫的形式。

為了批量的做這麼一件事,與,我寫了乙個儲存過程,通過讀取系統表,獲得資料庫表名,然後用光標的方式依次執行rename操作。

delimiter //

create procedure renametables(olddb varchar(50),newdb varchar(50))

begin

declare done boolean default 0;

declare tmp varchar(100); -- 定義區域性變數

declare tbcur cursor

for select table_name from `information_schema`.`tables` where table_schema=olddb and table_type='base table';

declare continue handler for sqlstate '02000' set done = 1;

open tbcur; -- 開啟游標

repeat

fetch tbcur into tmp;

if done=0

then

set @sqlstring=concat( 'rename table ',olddb,'.`',tmp,'` to ',newdb,'.`',lower(tmp),'`;');

select @sqlstring; -- 這一句可以不要,只是列印我們拼接後要執行的sql是什麼

prepare s1 from @sqlstring; -- 執行拼接出來的sql

execute s1;

deallocate prepare s1;

end if;

until done end repeat;

close tbcur; -- 關閉游標,釋放游標使用的所有內部記憶體和資源

end//

我們在新資料庫中建立了該儲存過程,然後呼叫即可:

call renametables('test1','test1')

這樣所有test1中的大小寫混合的表,就全部轉換到了test1資料庫中,而且表名都變成了小寫了。

乙個乙個的資料庫去這麼做,然後再把mysql的引數改為大小寫不敏感,這樣才能正常使用。

這裡我只是做了表的遷移,接下來儲存過程和檢視的遷移,由於不涉及到資料,所以比較簡單,找到當年的ddl或者我們在大小寫敏感的時候就匯出view和儲存過程的定義,然後用文字編輯器把整個sql變成小寫的,然後到新資料庫中去執行,重新建立即可。

將現有MySQL資料庫改為大小寫不敏感

用過mysql的應該都會注意到,預設情況下,linux下安裝的mysql是大小寫敏感的,也就是說table1和table1可以同時存在。而windows下的mysql卻是大小寫不敏感的,所有表名和資料庫名都會變成小寫。對於怎麼啟用或者停用mysql資料庫的大小寫敏感,這個網上隨便都能找到,就是改改引...

看MySQL資料庫大小

1 進去指定schema 資料庫 存放了其他的資料庫的資訊 use information schema 2 查詢所有資料的大小 select concat round sum data length 1024 1024 2 mb as data from tables 3 檢視指定資料庫的大小 比...

檢視mysql資料庫大小

資料量大的情況下 謹慎使用 mysql會崩潰!資料量大的情況下 謹慎使用 mysql會崩潰!資料量大的情況下 謹慎使用 mysql會崩潰!mysql檢視當前所有的資料庫和索引大小 select table schema,concat truncate sum data length 1024 102...