首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Win32 版與 Unix 版關鍵差異:執行緒、大小寫、路徑、命名管道詳解

     編輯:MySQL 資料庫相關知識

MySQL 在 Windows 與 Unix/Linux 上行為有顯著差異,開發與部署時必須注意。本文整理官方文件列出的關鍵差異點,含記憶體洩漏、UDF、大小寫敏感度、路徑分隔符、命名管道、存取權限等。

1. Win95 執行緒記憶體洩漏

  • 每建立一條連線(執行緒)洩漏 ~200 Bytes
  • 長時間運行、高併連會耗盡記憶體
  • WinNT/Win98/2000/XP 不受影響
  • 建議:Win95 僅用於開發測試,生產環境用 NT 核心系統

2. 阻塞式讀取與連線管理

  • Windows 使用阻塞式讀取,連線不會在 8 小時後自動斷開(Unix 預設 wait_timeout=28800)
  • 「掛起」的連線無法用 mysqladmin kill 斷開,需 mysqladmin shutdown 重啟服務
  • 計畫未來版本修正

3. UDF(使用者定義函數)不支援

Win32 版暫不支援 CREATE FUNCTION ... RETURNS ... SONAME。

4. DROP DATABASE 限制

無法刪除正被執行緒使用的資料庫(Unix 可強制刪除)。

5. 任務管理員無法強制結束

  • Win95:必須用 mysqladmin shutdown
  • NT/2000/XP:可用任務管理員結束進程,但不建議(可能損壞資料)

6. 大小寫不敏感

  • Windows 檔案系統不區分大小寫 → 資料庫/表名不區分大小寫
  • 同一條 SQL 內部必須一致:SELECT * FROM my_table WHERE MY_TABLE.col=1 會失敗
  • 建議:統一使用小寫命名,避免跨平台遷移問題

7. 路徑分隔符 \ 處理

  • Windows 路徑用 \,也是 MySQL 字串跳脫字元
  • LOAD DATA INFILE / SELECT ... INTO OUTFILE 兩種寫法:
    LOAD DATA INFILE 'C:\\tmp\\data.txt' INTO TABLE t;
    SELECT * FROM t INTO OUTFILE 'C:/tmp/data.txt';  -- 建議用正斜線
    

8. 命名管道預設導致連線失敗

  • NT 版預設用命名管道,新版客戶端會報 Can't open named pipe
  • 解決:連線加 --host=localhost 強制 TCP/IP,或建立 C:\my.cnf:
    [client]
    host = localhost
    

9. 主機名解析錯誤

  • 錯誤:Access denied for user 'user@unknown'
  • 原因:MySQL 無法反解客戶端 IP
  • 解決:建立 C:\Windows\hosts(或 \Windows\system32\drivers\etc\hosts):
    127.0.0.1 localhost
    

開放議題與未來改進

  • 單執行緒 mysqld.dll 嵌入式伺服器
  • GUI 版管理工具
  • 可中斷的 socket I/O,支援 mysqladmin kill
  • Windows 內部通訊協定替代 TCP/IP
  • DLL 實現 UDF

結語

跨平台部署 MySQL 時,大小寫命名規範、連線參數、啟動腳本 是三大坑點。開發階段即在目標作業系統測試,建立標準化部署清單,可避免 90% 的移植問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved