CREATE DATABASE 語法
CREATE DATABASE [IF NOT EXISTS] db_name
[CHARACTER SET charset_name]
[COLLATE collation_name]
命名規範 (避坑指南)
| 規則 | 正確範例 | 錯誤範例 | 原因 |
| 字元集合 | 字母、數字、_、$ | db-name, db@name | 連字符、@ 等特殊字元需反引號包裹,易出錯 |
| 首字元 | 字母、_、$ | 123db | 純數字開頭與數值常數衝突 |
| 長度限制 | ≤ 64 字元 | 超長名稱 | 系統表欄位長度限制 |
| 保留字 | 避免 select, order, group, key 等 | CREATE DATABASE select; | 需反引號 \`select\`,極易誤用 |
| 大小寫敏感度 | Linux 區分,Windows 不區分 | DbName vs dbname | 跨平台遷移建議全小寫 + 底線 |
字元集與排序規則指定 (強烈建議顯式指定)
-- 推薦:utf8mb4 + unicode_ci (支援 Emoji、多語言、正確排序)
CREATE DATABASE IF NOT EXISTS myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 兼容舊系統:utf8 + general_ci (不支援補充字元、排序較粗略)
CREATE DATABASE IF NOT EXISTS legacy_app
CHARACTER SET utf8
COLLATE utf8_general_ci;
不指定則繼承服務器預設 character_set_server / collation_server,易導致跨環境不一致。顯式指定是專業習慣。
驗證建庫結果
-- 列出所有資料庫
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| myapp |
| legacy_app |
| performance_schema |
| sys |
+--------------------+
-- 查看特定資料庫建立語句 (含字元集/排序規則)
SHOW CREATE DATABASE myapp\G
*************************** 1. row ***************************
Database: myapp
Create Database: CREATE DATABASE `myapp` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
權限隔離:建庫即建專用帳號
-- 1. 建立資料庫
CREATE DATABASE IF NOT EXISTS shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 2. 建立應用帳號 (僅限該庫)
CREATE USER 'shop_app'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON shop.* TO 'shop_app'@'%';
-- 3. 建立唯讀帳號 (報表/分析)
CREATE USER 'shop_ro'@'%' IDENTIFIED BY 'StrongPass456!';
GRANT SELECT ON shop.* TO 'shop_ro'@'%';
-- 4. 建立遷移/管理帳號 (臨時、高權限)
CREATE USER 'shop_dba'@'10.0.1.%' IDENTIFIED BY 'StrongPass789!';
GRANT ALL PRIVILEGES ON shop.* TO 'shop_dba'@'10.0.1.%';
FLUSH PRIVILEGES;
刪除資料庫 (謹慎操作)
DROP DATABASE [IF EXISTS] db_name;
-- 會同時刪除該庫所有表、視圖、程序、觸發器、資料,不可恢復!
-- 生產環境建議:先 RENAME TABLE db_name TO db_name_bak_20240101; 確認無誤後再 DROP。
資料庫層級配置 (my.cnf 區段)
# 針對特定資料庫的參數覆蓋 (較少用,通常實例級統一)
# 5.7+ 支援資源群組 Resource Groups 綁定 CPU
# 8.0+ 支援 Persisted Variables 持久化 SET PERSIST
建庫三部曲:規範命名 → 顯式字元集 → 專用帳號最小權限。納入自動化部署腳本,確保跨環境 (Dev/Test/Staging/Prod) 一致性,避免「在我機器上好好的」字元集亂碼災難。