MySQL 連接預設不綁定任何庫,**每次會話/連接必須顯式選擇目標庫**。本文對比命令行 USE、PHP 舊 mysql_select_db、新 mysqli_select_db/PDO 切換方式,並附帶常見數據類型速查表供建表參考。
USEmysql -u root -p Enter password: ****** mysql> USE tutorials; Database changed mysql> SHOW TABLES; -- 現在操作 tutorials 庫下的表
注意:庫名、表名、欄位名 **Linux 下區分大小寫**,統一用小寫避坑。
$conn = mysql_connect('localhost:3306', 'guest', 'guest123');
mysql_select_db('tutorials', $conn); // 返回 bool
$mysqli = new mysqli('localhost', 'guest', 'guest123');
$mysqli->select_db('tutorials'); // 或構造函數第 4 參數直接指定
// new mysqli('host', 'user', 'pass', 'dbname', port);
$pdo = new PDO('mysql:host=localhost;dbname=tutorials;charset=utf8mb4', 'guest', 'guest123');
// 運行時切換
$pdo->exec('USE other_db');
| 分類 | 類型 | 存儲/範圍 | 選型建議 |
|---|---|---|---|
| 數值 | TINYINT | 1 字節 | 布爾值、狀態碼 |
SMALLINT | 2 字節 | 小範圍整數 | |
MEDIUMINT | 3 字節 | 中等整數 | |
INT | 4 字節 | **主鍵首選**、通用整數 | |
BIGINT | 8 字節 | 極大整數、分布式 ID | |
FLOAT | 4 字節 | 單精度,科學計算 | |
DOUBLE | 8 字節 | 雙精度 | |
DECIMAL(M,D) | M+2 字節 | **金額、精確計算必用** | |
| 日期時間 | DATETIME | 8 字節 | 無時區,歷史記錄、日誌首選 |
TIMESTAMP | 4 字節 | UTC 存儲,自動時區轉換,創建/修改時間 | |
DATE | 3 字節 | 純日期 | |
TIME | 3 字節 | 純時間 | |
YEAR | 1 字節 | 年份 | |
| 字符串 | CHAR(N) | N 字節 | 定長,MD5、UUID、國家代碼 |
VARCHAR(N) | L+1/2 字節 | **變長首選**,節省空間、查詢快 | |
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT | 255/65K/16M/4G | 長文本,不建議建索引 | |
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB | 同 TEXT | 二進制數據,圖片/文件 | |
ENUM | 1-2 字節 | 單選枚舉,如性別、狀態 | |
SET | 1-8 字節 | 多選集合,如標籤、權限掩碼 |
CHAR vs VARCHAR:CHAR 定長右側填充空格,檢索時去除尾部空格;VARCHAR 變長需 1-2 字節存長度,**查詢掃描字節更少、磁碟 I/O 更低**,優先用 VARCHAR。BINARY/VARBINARY:二進制字節串,**無字符集、按字節值比較排序**,用於存哈希、加密數據、大小寫敏感代碼。BLOB/TEXT 四檔對應:TINY(255)、NORMAL(64K)、MEDIUM(16M)、LONG(4G);**不建議直接存大文件**,參考 BLOB 存儲最佳實踐 (對象存儲+URL)。**命令行 USE db,PHP 構造連接時直接帶庫 (mysqli 第 4 參數 / PDO DSN dbname),運行時切換用 select_db()/exec('USE')**。數據類型選型口訣:**整數用 INT/BIGINT,金額用 DECIMAL,時間用 DATETIME/TIMESTAMP,字符串用 VARCHAR,大文本/二進制外存 URL**。將類型表貼在工位,建表不再猶豫。