com.mysql.jdbc.Driver // 主要類名 (Connector/J 5.1 及以前)
com.mysql.cj.jdbc.Driver // 6.0+ (JDBC 4.2+, Java 8+)
org.gjt.mm.mysql.Driver // 向後相容 MM.MySQL 專案類名
註冊方式:Class.forName("com.mysql.cj.jdbc.Driver") 或 META-INF/services/java.sql.Driver 自動載入 (JDBC 4.0+)。
jdbc:mysql://[host][,failoverhost...][:port]/[database][?propertyName1=value1&propertyName2=value2...]
host:預設 127.0.0.1port:預設 3306database:可省略,後續 setCatalog() 或 USE db 指定jdbc:mysql://host1:3306,host2:3306/db?autoReconnect=true| 類別 | 屬性名 | 說明 | 預設值 |
|---|---|---|---|
| 連線/認證 | user | 資料庫用戶名 | 無 |
password | 密碼 | 無 | |
socketFactory | 自定義 Socket 工廠類名 | com.mysql.jdbc.StandardSocketFactory | |
connectTimeout | 建立連線超時 (ms, 0=無限) | 0 | |
| 高可用/叢集 | autoReconnect | 連線失敗自動重連 | false |
autoReconnectForPools | 連線池專用重連策略 | false | |
failOverReadOnly | 故障切換後唯讀 | true | |
| 安全/SSL | useSSL | 啟用 SSL | false (8.0+ 預設 true) |
requireSSL | 強制 SSL | false | |
verifyServerCertificate | 驗證伺服器憑證 | true | |
| 效能/快取 | cachePrepStmts | 快取 PreparedStatement | false |
prepStmtCacheSize | 快取語句數量 | 25 | |
prepStmtCacheSqlLimit | 快取 SQL 長度上限 | 256 | |
useServerPrepStmts | 使用伺服器端預編譯 | true (8.0+) | |
| 字元集/編碼 | characterEncoding | 字元集 (UTF-8/GBK/Big5) | 自動偵測 |
useUnicode | 使用 Unicode | true | |
connectionCollation | 連線校對規則 | 無 | |
| 除錯/分析 | profileSQL | 記錄 SQL 執行時間 | false |
logger | 自定義 Logger 類 | StandardLogger (STDERR) | |
slowQueryThresholdMillis | 慢查詢閾值 (ms) | 2000 | |
| 相容/行為 | zeroDateTimeBehavior | 零日期處理: exception/round/convertToNull | exception |
tinyInt1isBit | TINYINT(1) 視為 BIT | true | |
jdbcCompliantTruncation | 截斷拋出 DataTruncation | true |
# 基礎連線 (UTF-8, SSL, 時區)
jdbc:mysql://db.example.com:3306/myapp?useSSL=true&verifyServerCertificate=true&serverTimezone=Asia/Taipei&characterEncoding=UTF-8
# 連線池優化 (HikariCP 建議)
jdbc:mysql://db.example.com:3306/myapp?useSSL=true&cachePrepStmts=true&prepStmtCacheSize=250&prepStmtCacheSqlLimit=2048&useServerPrepStmts=true&rewriteBatchedStatements=true
# 讀寫分離 / 故障轉移 (需 ProxySQL 或驅動端支援)
jdbc:mysql://master:3306,slave1:3306,slave2:3306/myapp?autoReconnect=true&failOverReadOnly=true&loadBalanceStrategy=bestResponseTime
# 命名管道 (Windows 本機, 30-50% 更快)
jdbc:mysql:///myapp?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory&namedPipePath=\\.\pipe\MySQL
named_pipe=ONsocketFactory=com.mysql.jdbc.NamedPipeSocketFactorypublic class MySocketFactory extends StandardSocketFactory {
@Override
public Socket connect(String host, int port, Properties props) throws SQLException {
// 自定義連線邏輯: SOCKS Proxy、SSH Tunnel、Unix Domain Socket 等
return super.connect(host, port, props);
}
}
// URL 指定: socketFactory=com.example.MySocketFactory
| 項目 | 5.1 | 8.0+ |
|---|---|---|
| Driver 類 | com.mysql.jdbc.Driver | com.mysql.cj.jdbc.Driver |
| JDK 需求 | 6+ | 8+ |
| SSL 預設 | false | true |
| 時區處理 | serverTimezone 必填 | 自動偵測/支援 IANA |
| 公鑰獲取 | 不支援 | allowPublicKeyRetrieval=true (缓存掉公鑰) |
| Maven 坐標 | mysql:mysql-connector-java | com.mysql:mysql-connector-j |
MySQL Connector/J 以豐富的連接屬性著稱,掌握 Driver 類名、URL 格式、核心屬性分類 可快速解決連線、效能、安全、高可用等生產問題。建議專案統一使用 com.mysql.cj.jdbc.Driver (8.0+)、useSSL=true、serverTimezone 明確指定、連線池開啟 cachePrepStmts 等關鍵優化參數。