MySQL 不支援 RENAME DATABASE,若要將整庫表移至新資料庫,標準做法是:建立新庫 → RENAME TABLE 逐表移動 → 刪除舊庫。
-- 1. 建立新資料庫(指定字元集)
CREATE DATABASE `ct` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 2. 逐表重命名(舊庫.表 -> 新庫.表)
RENAME TABLE `51cola`.`commentmeta` TO `ct`.`commentmeta`;
RENAME TABLE `51cola`.`comments` TO `ct`.`comments`;
RENAME TABLE `51cola`.`customcontactforms_fields` TO `ct`.`customcontactforms_fields`;
RENAME TABLE `51cola`.`customcontactforms_field_options` TO `ct`.`customcontactforms_field_options`;
RENAME TABLE `51cola`.`customcontactforms_forms` TO `ct`.`customcontactforms_forms`;
RENAME TABLE `51cola`.`customcontactforms_styles` TO `ct`.`customcontactforms_styles`;
RENAME TABLE `51cola`.`customcontactforms_user_data` TO `ct`.`customcontactforms_user_data`;
RENAME TABLE `51cola`.`links` TO `ct`.`links`;
RENAME TABLE `51cola`.`options` TO `ct`.`options`;
RENAME TABLE `51cola`.`postmeta` TO `ct`.`postmeta`;
RENAME TABLE `51cola`.`posts` TO `ct`.`posts`;
RENAME TABLE `51cola`.`terms` TO `ct`.`terms`;
RENAME TABLE `51cola`.`term_relationships` TO `ct`.`term_relationships`;
RENAME TABLE `51cola`.`term_taxonomy` TO `ct`.`term_taxonomy`;
RENAME TABLE `51cola`.`usermeta` TO `ct`.`usermeta`;
RENAME TABLE `51cola`.`users` TO `ct`.`users`;
-- 3. 確認無誤後刪除舊庫
DROP DATABASE `51cola`;
SELECT CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `ct`.`', TABLE_NAME, '`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '51cola';
將輸出複製執行即可,避免手寫遺漏。
RENAME TABLE 是原子操作,執行期間會短暫鎖表,大表影響極小(僅修改元數據)。mysqldump -d --routines --triggers --events 並在新庫建立。
mysqldump -u root -p --databases 51cola > 51cola.sql
# 編輯 SQL 將 `51cola` 替換為 `ct`
sed -i 's/`51cola`/`ct`/g' 51cola.sql
mysql -u root -p < 51cola.sql
適合表數極多或需同時修改字元集的場景。