升級至 MySQL 4.1.1x 後,PHP 使用傳統 mysql 擴展連線會報錯:1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client。本文說明原因與解決方案。
mysql 擴展基於 MySQL 3.23 客戶端庫,僅支援舊式認證(16 字元雜湊)PHP 5 內建 mysqli 支援新認證協議,程式碼改動較小:
$conn = mysqli_connect('localhost', 'root', 'password', 'dbname');
$result = mysqli_query($conn, $sql);
mysql> SET PASSWORD FOR 'user1'@'localhost' = OLD_PASSWORD('yourPassword');
OLD_PASSWORD() 產生 16 字元舊式雜湊,相容舊客戶端。
[mysqld]
old_passwords=1
會降低整體安全性,僅作過渡方案。
OLD_PASSWORD() 維持相容根本解決在於客戶端庫升級,建議規劃遷移至 mysqli 或 PDO_MySQL,確保長期相容與安全。