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

2021-09-23 17:45:45 字數 1981 閱讀 8436

用過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...