MySQL 4.1.1+ 採用 41 位雜湊密碼(以 * 開頭),舊版客戶端(含 PHP 4 內建 libmysql.dll)僅支援 16 位舊格式,導致錯誤:
#1250 - Client does not support authentication protocol requested by server;
consider upgrading MySQL client
以 MySQL 5.0 版 libmysql.dll 替換 PHP ext/ 目錄下舊版。實測問題:新 DLL 缺少 mysql_drop_db() 等函數,導致 php_mysql.dll 載入失敗。需等待 PHP 或 MySQL 釋出相容版本。
mysqld-nt --old-passwords
驗證:SELECT PASSWORD('mypass'); 回傳 16 位雜湊。
C:\Windows\my.ini 或 C:\WINNT\my.ini):
[mysqld]
basedir=C:/MySQL
datadir=C:/MySQL/data
set-variable=old-passwords
FLUSH PRIVILEGES;。mysql.user.Password 欄位長度為 CHAR(16) 時自動切換舊演算法;CHAR(41) 則用新演算法。可透過 ALTER TABLE mysql.user MODIFY Password CHAR(16); 強制切換(修改後需重設密碼)。
PHP 5 內建 mysqli 擴展原生支援 41 位雜湊,無需降級 Server。建議長期規劃遷移至 PHP 5 + mysqli/PDO。