用過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 default0;
declare tmp varchar(100); --
定義區域性變數
declare tbcur cursor
forselect 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=
0then
set@sqlstring
=concat( '
rename table
',olddb,'
.`',tmp,'
` to
',newdb,'
.`',lower(tmp),'`;'
);
select
@sqlstring
; -- 這一句可以不要,只是列印我們拼接後要執行的sql是什麼
prepare s1 from
@sqlstring; --
執行拼接出來的sql
execute
s1;
deallocate
prepare
s1;
endif
; until done
endrepeat;
close tbcur; --
關閉游標,釋放游標使用的所有內部記憶體和資源
end//
call renametables('這樣所有test1中的大小寫混合的表,就全部轉換到了test1資料庫中,而且表名都變成了小寫了。test1
','test1
')
乙個乙個的資料庫去這麼做,然後再把mysql的引數改為大小寫不敏感,這樣才能正常使用。
這裡我只是做了表的遷移,接下來儲存過程和檢視的遷移,由於不涉及到資料,所以比較簡單,找到當年的ddl或者我們在大小寫敏感的時候就匯出view和儲存過程的定義,然後用文字編輯器把整個sql變成小寫的,然後到新資料庫中去執行,重新建立即可。
將現有MySQL資料庫改為大小寫不敏感
摘要 用過mysql的應該都會注意到,預設情況下,linux下安裝的mysql是大小寫敏感的,也就是說table1和table1可以同時存在。而windows下的mysql卻是大小寫不敏感的,所有表名和資料庫名都會變成小寫。用過mysql的應該都會注意到,預設情況下,linux下安裝的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...