摘要: 用過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...