首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 入門

MySQL CREATE DATABASE 建立資料庫完全指南:mysqladmin、PHP 實戰、字符集排序規則與最佳實踐

     編輯:MySQL 入門

MySQL CREATE DATABASE 建立資料庫完全指南:mysqladmin、PHP 實戰、字符集排序規則與最佳實踐

CREATE DATABASE 是資料庫專案的起點。一個良好的資料庫創建:字符集統一、排序規則正確、權限最小化、命名規範,能避免後續「亂碼、排序錯誤、大小寫敏感、權限過大」等棘手問題。本文系統講解命令列工具、SQL 語法、PHP 實戰,並給出生產級建庫清單。

命令列:mysqladmin create

[root@host]# mysqladmin -u root -p create RUNOOB
Enter password:******
  • 簡單快速,適合手動建庫。
  • 使用預設字符集/排序規則(通常為 latin1_swedish_ci 或 utf8mb4_general_ci,視版本與配置)。生產環境建議用 SQL 顯式指定。

SQL 語法:完整控制字符集與排序規則

CREATE DATABASE [IF NOT EXISTS] db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name];

生產環境標準建庫語句

CREATE DATABASE IF NOT EXISTS `myapp_prod`
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_0900_ai_ci; -- MySQL 8.0+ 推薦,支援 Unicode 9.0、不區分重音/大小寫
  • utf8mb4:支援完整 Unicode(含 Emoji、生僻字),必選。
  • utf8mb4_0900_ai_ci(8.0+):基於 Unicode 9.0,Accent Insensitive(不區分重音)、Case Insensitive(不區分大小寫),排序更符合直覺。
  • utf8mb4_general_ci(5.7/舊版):較舊、排序規則簡化、效能略高但準確度稍低。
  • 避免使用 utf8(僅 3 Bytes,不支援 Emoji)和 latin1(西歐字符集)。

PHP 實戰:mysqli / PDO 建庫

mysqli 物件風格

<?php
$conn = new mysqli('localhost:3306', 'root', 'rootpassword');
if ($conn->connect_error) die('Connect failed: ' . $conn->connect_error);

$db = 'myapp_prod';
$sql = "CREATE DATABASE IF NOT EXISTS `$db`
        DEFAULT CHARACTER SET utf8mb4
        DEFAULT COLLATE utf8mb4_0900_ai_ci";

if ($conn->query($sql)) {
    echo "Database `$db` created successfully\n";
} else {
    echo "Create failed: " . $conn->error;
}
$conn->close();
?>

PDO(推薦)

<?php
$dsn_no_db = 'mysql:host=localhost;port=3306;charset=utf8mb4';
$pdo = new PDO($dsn_no_db, 'root', 'rootpassword', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);

$db = 'myapp_prod';
$sql = "CREATE DATABASE IF NOT EXISTS `$db`
        DEFAULT CHARACTER SET utf8mb4
        DEFAULT COLLATE utf8mb4_0900_ai_ci";
$pdo->exec($sql);
echo "Database `$db` created successfully\n";
?>

建庫後必做:建立應用專用帳號、最小權限授權

-- 建立帳號
CREATE USER 'myapp_rw'@'%' IDENTIFIED BY 'strong_random_password';
CREATE USER 'myapp_ro'@'%' IDENTIFIED BY 'strong_random_password';

-- 授權:讀寫帳號
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE
ON `myapp_prod`.* TO 'myapp_rw'@'%';

-- 授權:唯讀帳號(報表、BI、只讀副本)
GRANT SELECT ON `myapp_prod`.* TO 'myapp_ro'@'%';

FLUSH PRIVILEGES;
  • 嚴禁應用使用 root 連線。
  • 按環境區分帳號:myapp_prod_rw、myapp_staging_rw 等。
  • 密碼使用強隨機字串(≥32 字符),存放於密碼管理器/Secret Manager,不入代碼倉庫。

生產級建庫清單

  1. 命名規範: {project}_{env},如 myapp_prod、myapp_staging、myapp_test。小寫、下劃線、無保留字。
  2. 字符集: utf8mb4 + utf8mb4_0900_ai_ci(8.0+)或 utf8mb4_general_ci(5.7)。
  3. IF NOT EXISTS: 幂等腳本,重複執行不報錯。
  4. 專用帳號 + 最小權限: 讀寫分離帳號,無 DDL 權限。
  5. 配置 my.cnf 固化預設:
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_0900_ai_ci
    init_connect = 'SET NAMES utf8mb4'
  6. 版本控管: 建庫 SQL 納入 Flyway/Liquibase/Migration 版本管理,可追溯、可回滾、可審計。
  7. 備份策略同步生效: 建庫後立即納入自動備份排程(全量+增量)、驗證可還原。

常見錯誤

  • Error 1007: Database 'xxx' already exists:加 IF NOT EXISTS。
  • Error 1044: Access denied:帳號無 CREATE DATABASE 權限,需 root 或具備全域 CREATE 權限帳號。
  • ERROR 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci':MySQL 版本 < 8.0,改用 utf8mb4_general_ci 或 utf8mb4_unicode_ci。

CREATE DATABASE 看似一行命令,實則決定了專案字符集命運、權限邊界、運維基線。將「utf8mb4 強制、專用帳號最小權限、命名規範、版本控管、備份同步」貫徹落地,為業務資料奠定乾淨、標準、可演進的基因組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved