建立資料庫是 MySQL 運維與開發的高頻操作。本文對比 mysqladmin 命令列工具與 PHP 程式化介面兩種主流建庫方式,解析適用場景、權限模型與現代化最佳實踐。
mysqladmin 是官方提供的管理客戶端,支援建庫、刪庫、狀態檢視等核心功能。
mysqladmin -u root -p create DATABASE_NAME
[root@host]# mysqladmin -u root -p create TUTORIALS Enter password:****** # 成功無輸出,驗證: mysql -u root -p -e "SHOW DATABASES LIKE 'TUTORIALS'"
CREATE 權限,可建立專用運維帳號DROP 有確認提示,適合 CI/CD 流水線--default-character-set=utf8mb4 強制編碼# 指定字符集與排序規則(需 MySQL 5.5+)
mysqladmin -u root -p --default-character-set=utf8mb4 create TUTORIALS
# 批次建庫(配合 Shell 迴圈)
for db in app_user app_order app_log; do
mysqladmin -u root -p${PWD} create ${db} || echo "Failed: ${db}"
done
現代應用極少直接使用已棄用的 mysql_* 函數,本節以 mysqli (物件導向) 為例示範標準建庫模式。
<?php
$host = 'localhost';
$user = 'root';
$pass = 'rootpassword';
$charset = 'utf8mb4';
$mysqli = new mysqli($host, $user, $pass);
if ($mysqli->connect_errno) {
die("連線失敗: " . $mysqli->connect_error);
}
$mysqli->set_charset($charset);
$dbName = 'TUTORIALS';
// 防 SQL 注入:識別符需用 backtick 包裹,不接受使用者輸入
$sql = "CREATE DATABASE IF NOT EXISTS `$dbName`
DEFAULT CHARACTER SET $charset
COLLATE ${charset}_unicode_ci";
if ($mysqli->query($sql)) {
echo "資料庫 $dbName 建立成功\n";
} else {
die("建立失敗: " . $mysqli->error);
}
$mysqli->close();
?>
<?php
$dsn = "mysql:host=localhost;charset=utf8mb4";
$pdo = new PDO($dsn, 'root', 'rootpassword', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false,
]);
$dbName = 'TUTORIALS';
$pdo->exec("CREATE DATABASE IF NOT EXISTS `$dbName` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
echo "資料庫 $dbName 建立成功\n";
?>
| 維度 | mysqladmin | mysqli / PDO |
|---|---|---|
| 適用角色 | DBA、運維、自動化腳本 | 應用開發、安裝向導、管理後台 |
| 部署依賴 | MySQL 客戶端套件 | PHP 擴充模組 (mysqli/pdo_mysql) |
| 字符集控制 | 參數 --default-character-set | SQL 子句 DEFAULT CHARACTER SET |
| 錯誤處理 | 退出碼 + stderr | Exception / 錯誤碼 + 錯誤訊息 |
| 事務支援 | 無(DDL 隱式提交) | 無(DDL 隱式提交) |
| 現代化程度 | 成熟穩定 | 需使用 mysqli/PDO,棄用 mysql_* |
utf8mb4 + utf8mb4_unicode_ciCREATE DATABASE IF NOT EXISTS 避免重複執行報錯db_creator@'%' 帳號,僅授 CREATE、SHOW DATABASES 權限SHOW CREATE DATABASE 驗證字符集生效mysql_connect()、mysql_query() 等 PHP 5 時代 API,請優先排程遷移至 mysqli 或 PDO,避免 PHP 8+ 環境直接失效。
無論命令列還是程式化介面,「顯式字符集、冪等邏輯、最小權限、審計留痕」是建庫操作的四大鐵律。