Windows 下 MinTTY (Cygwin 終端) 無法正常運行原生 mysql.exe 交互式會話:輸入 mysql -uroot -p 後程式掛起,即使帶密碼參數也無法進入。根因為 MinTTY 基於 Unix PTY 模擬,原生 Windows 主控台程式無法正確處理標準輸入輸出流。
Cygwin 官方倉庫未提供 MySQL 客戶端包,需從原始碼編譯。
gcc-g++、make、cmake、readline、libreadline-devel、openssl-devel、zlib-develwget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.xx.tar.gzcd mysql-5.7.xx
./configure \
--without-server \ # 僅編譯客戶端,不編譯 Server
--without-readline \ # 使用系統 readline,避免內建版本編譯錯誤
--with-ssl=system \
--with-zlib=system \
CFLAGS="-O2 -pipe" \
CXXFLAGS="-O2 -pipe"
make -j$(nproc)
make install
注意: Cygwin 編譯速度極慢(較 Linux 慢 5-10 倍),編譯完整 Server 可能需數小時,僅編譯 Client 通常 20-40 分鐘。
編譯安裝後,預設連接使用 Unix Socket,需強制 TCP/IP 模式:
# 複製配置模板
cp support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
protocol = TCP # 強制 TCP/IP 連接
default-character-set = utf8
之後即可在 MinTTY 正常使用:mysql -h127.0.0.1 -uroot -p(-h127.0.0.1 強制 TCP,避免 localhost 走 Socket)。
Cygwin/MinTTY 設為 UTF-8 後,Windows 原生命令 (ping、ipconfig、nslookup) 會顯示亂碼,因中文 Windows 預設代碼頁為 GBK (CP936)。
| 方案 | 優點 | 缺點 |
|---|---|---|
| MinTTY 設 UTF-8,接受原生命令亂碼 | MySQL/開發工具完美支援中文 | 系統管理命令需切換編碼或忍受亂碼 |
| MinTTY 設 GBK,MySQL 連接指定字符集 | 系統命令正常 | MySQL 客戶端顯示需額外 SET NAMES gbk,易出錯 |
| 使用 Windows Terminal / PowerShell 7+ 原生支援 UTF-8 | 完美解決雙邊編碼 | 需 Win10 1903+,非 Cygwin 環境 |
建議: 開發主力機遷移至 Windows Terminal + WSL2 + 原生 Linux MySQL Client,徹底規避 Cygwin 層轉換問題,獲得原生效能與完美編碼支援。