MySQL 4.1.1 版本起引入 41 位雜湊密碼格式,導致舊版客戶端(如 PHP 4.x 自帶 libmysql.dll)無法認證,報錯:
#1250 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
mysql_native_password 插件(41 位雜湊)old_password 格式
php_mysql.dll 綁定舊版 libmysql.dll,缺少新認證協議支持libmysql.dll 替換 PHP ext 目錄下同名文件mysql_drop_db() 等廢棄函數,導致 PHP 啟動報錯C:\mysql\bin> mysqld-nt --old-password
# 另開窗口測試
C:\mysql\bin> mysql -uroot
mysql> SELECT PASSWORD('mypassword');
+------------------------+
| 162eebfb6477e5d3 | <-- 16位舊格式
+------------------------+
編輯 my.ini(Windows 通常在 C:\Windows\my.ini 或安裝目錄):
[mysqld]
basedir=C:/mysql
datadir=C:/mysql/data
old_passwords=1 # 關鍵參數
重啟 MySQL 服務生效。
mysql.user 表 Password 列長度決定認證模式:
old_password 模式mysql_native_password 模式修改密碼後務必執行 FLUSH PRIVILEGES 或重啟服務使權限生效。
mysqli 或 PDO_MySQL 擴展(基於 mysqlnd 原生驅動)caching_sha2_password,客戶端需 8.0+ 版本old_passwords=1,存在安全隱患