建立資料庫是資料庫初始化、應用部署、測試環境構建的高頻操作。本文對比 mysqladmin 命令列工具(簡單直接)與 PHP mysql_query 程式化創建(可整合 CI/CD、參數化管理)兩種核心方式,提供命名規範、字符集選擇、權限配置、自動化部署最佳實踐。
# 以 root 權限創建(需 CREATE 權限) mysqladmin -u root -p create TUTORIALS Enter password: ****** # 成功無輸出,驗證: mysql -u root -p -e "SHOW DATABASES LIKE 'TUTORIALS';"
bool mysql_query(string $sql, resource $link_identifier = null) -- $sql: CREATE DATABASE db_name [CHARACTER SET charset] [COLLATE collation]
<?php
// 配置參數化
$db_host = 'localhost:3036';
$db_user = 'root';
$db_pass = 'rootpassword';
$target_db = 'TUTORIALS';
$charset = 'utf8mb4';
$collation = 'utf8mb4_unicode_ci';
$conn = mysql_connect($db_host, $db_user, $db_pass);
if (!$conn) {
die('連接失敗: ' . mysql_error());
}
echo '連接成功<br />';
// 冪等檢查:避免重複創建報錯
$check_sql = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$target_db'";
$check_result = mysql_query($check_sql, $conn);
if (mysql_num_rows($check_result) > 0) {
echo "資料庫 $target_db 已存在,跳過創建。\n";
mysql_close($conn);
exit(0);
}
// 創建語句:顯式指定字符集與排序規則
$sql = "CREATE DATABASE `$target_db` CHARACTER SET $charset COLLATE $collation";
$retval = mysql_query($sql, $conn);
if (!$retval) {
die('創建資料庫失敗: ' . mysql_error());
}
echo "資料庫 $target_db 創建成功 (charset=$charset, collation=$collation)\n";
mysql_close($conn);
?>
| 規範項 | 建議標準 | 說明 |
|---|---|---|
| 命名風格 | snake_case、小寫、業務前綴 | 如:biz_order、biz_user、log_audit |
| 長度限制 | ≤ 64 字元 | MySQL 識別符上限 |
| 字符集 | utf8mb4 (MySQL 5.5.3+) | 完整 Unicode、支援 Emoji、避免 utf8 偽集 |
| 排序規則 | utf8mb4_unicode_ci / utf8mb4_0900_ai_ci | Unicode 標準排序、8.0 推薦 0900_ai_ci |
| 禁止字符 | 保留字、特殊符號、空格 | 需反引號包裹才能使用 |
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!'; GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `biz_order`.* TO 'app_user'@'%'; FLUSH PRIVILEGES;
log_bin=ONSET GLOBAL time_zone = '+08:00'; 或 my.cnf default-time-zone = '+08:00'# Ansible Task 範例
- name: Create MySQL database
community.mysql.mysql_db:
name: "{{ db_name }}"
encoding: utf8mb4
collation: utf8mb4_unicode_ci
state: present
login_user: root
login_password: "{{ mysql_root_password }}"
# Terraform Resource 範例
resource "mysql_database" "app_db" {
name = var.db_name
charset = "utf8mb4"
collation = "utf8mb4_unicode_ci"
}
運維手工用 mysqladmin、自動化部署用 IaC/腳本。核心鐵律:統一 utf8mb4、顯式排序規則、冪等創建、最小權限帳號、遷移腳本版本化。建議將資料庫創建納入標準化環境佈建流程,實現「一鍵交付、配置即代碼、狀態可驗證」。