mysql -u root -p USE testdb; -- Database changed -- 後續所有操作針對 testdb
注意:數據庫/表/列名在 Linux 下區分大小寫(受文件系統影響),Windows 下不區分。最佳實踐:統一小寫,避免跨平台遷移問題。
<?php
// mysqli 面向對象 (推薦)
$mysqli = new mysqli('localhost', 'root', 'pass');
$mysqli->select_db('testdb');
// mysqli 過程式
$link = mysqli_connect('localhost', 'root', 'pass');
mysqli_select_db($link, 'testdb');
// PDO (通用)
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', 'pass');
?>
棄用警告:mysql_* 函數自 PHP 5.5 棄用,7.0 移除。請使用 mysqli 或 PDO。
| 類型 | 存儲(字節) | 範圍(有符號) | 範圍(無符號) | 用途 |
|---|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 | 布爾、狀態碼、極小整數 |
| SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 | 小範圍計數、年份 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 | 中等整數、IP 地址存儲 |
| INT / INTEGER | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 | 標準主鍵、計數器 |
| BIGINT | 8 | -9e18 ~ 9e18 | 0 ~ 1.8e19 | 大數據主鍵、時間戳毫秒 |
| FLOAT | 4 | ±3.4e38 (約7位精度) | - | 單精度浮點、科學計算 |
| DOUBLE | 8 | ±1.7e308 (約15位精度) | - | 雙精度浮點、經緯度 |
| DECIMAL(M,D) | M+2 | 精確定點數,M 總位數 D 小數位 | - | 金額、價格、精確計算 |
| BIT(N) | (N+7)/8 | 位字段 | - | 權限掩碼、標誌位集合 |
最佳實踐:整數優先 UNSIGNED,金額必用 DECIMAL(10,2),避免浮點誤差。
| 類型 | 存儲 | 範圍 | 零值 | 特性 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01 ~ 9999-12-31 | 0000-00-00 | 純日期 |
| TIME | 3 | -838:59:59 ~ 838:59:59 | 00:00:00 | 純時間/間隔 |
| DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 0000-00-00 00:00:00 | 無時區,靜態時間點 |
| TIMESTAMP | 4 | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 0000-00-00 00:00:00 | 時區感知,自動轉換,DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
| YEAR | 1 | 1901 ~ 2155 | 0000 | 僅年份 |
選擇建議:業務時間用 DATETIME,記錄修改時間用 TIMESTAMP,5.6.5+ 支持 DATETIME(3) 毫秒精度。
| 類型 | 最大長度 | 存儲 | 特性 |
|---|---|---|---|
| CHAR(N) | 255 字符 | N 字符 (定長填充空格) | 固定長度,極快,尾部空格截斷 |
| VARCHAR(N) | 65535 字符 (共享 64KB 行上限) | 實際長度 + 1-2 字節長度前綴 | 變長,節省空間,尾部空格保留 |
| TINYTEXT | 255 字符 | L + 1 | 無 DEFAULT,不支持全文索引(舊版) |
| TEXT | 65535 字符 | L + 2 | 同上 |
| MEDIUMTEXT | 16777215 字符 | L + 3 | 同上 |
| LONGTEXT | 4GB 字符 | L + 4 | 同上 |
| BINARY/VARBINARY | 同 CHAR/VARCHAR | 同 | 二進制字節串,無字符集,按字節比較 |
| BLOB 系列 | 同 TEXT 系列 | 同 | 二進制大對象,存圖片/文件(不推薦) |
| ENUM | 65535 枚舉值 | 1-2 字節 | 單選,內部存數字索引,插入需匹配定義值 |
| SET | 64 成員 | 1-8 字節 | 多選,位掩碼存儲,FIND_IN_SET 查詢 |
utf8mb4 + utf8mb4_unicode_cilatin1 或 ascii,索引體積減半、比較更快utf8mb4_bin 或 latin1_binutf8mb4_unicode_ci (UCA) 或 gbk_chinese_ci# JDBC
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
# PHP mysqli
$mysqli->set_charset('utf8mb4');
# PDO
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass');