首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Windows 命令行執行 SQL 腳本報錯:單引號轉義與特殊字符處理

     編輯:程式設計綜合問答

現象

  • Zend Studio 編寫 SQL,表名/列名用反引號 \`table\` 或單引號 'value'。
  • 複製到 cmd.exe 直接執行報語法錯誤。
  • 刪除所有引號後可執行(但語義變了)。

原因分析

  1. cmd.exe 對特殊字符解析不同:^、&、|、<、>、"、' 等在批處理上下文有特殊含義。
  2. MySQL 客戶端交互模式 vs 管道/參數模式:
    • mysql -u root -p < script.sql:標準輸入讀取,**不經 cmd 解析**,原樣傳給 MySQL,**推薦此方式**。
    • mysql -u root -p -e "SQL 语句":SQL 字符串先經 cmd 解析,**需雙重轉義**。
  3. 引號嵌套衝突:SQL 內單引號 'abc' 若放在 -e " ... ' 中,外層雙引號與內層單引號在 cmd 中可能被誤判為字符串結束。

正確的三種執行姿勢

方式命令示例適用場景注意點
**文件重定向(最穩)**mysql -u root -p db_name < script.sql長腳本、含任意引號/特殊字符文件編碼需與 MySQL charset 一致(建議 UTF-8)
**交互模式 source**mysql -u root -p db_name → source /path/script.sql;需先進入交互、多腳本順序執行路徑用正斜杠或雙反斜杠
**參數 -e(簡短語句)**mysql -u root -p -e "SELECT * FROM \`t\` WHERE c='a'"單條/極短語句**外層雙引號,內層反引號/單引號**;含雙引號時外層改單引號並轉義

轉義速查表

# cmd 轉義字符:^
# 例:在 -e 雙引號字符串中包含雙引號
mysql -e "SELECT 'He said ^\"Hi^\"'"

# PowerShell 另一套規則:` 為轉義
mysql -e "SELECT 'He said `\"Hi`\"'"

最佳實踐建議

  1. **長腳本永遠存文件**,用重定向或 source 執行,避開 Shell 轉義地獄。
  2. 文件編碼統一 **UTF-8 無 BOM**,MySQL 連接指定 --default-character-set=utf8mb4。
  3. 工具導出 SQL 時勾選「不含反引號」或「用雙引號」(ANSI 模式),減少兼容性問題。
  4. 自動化腳本(bat/powershell)中,**優先調用 `mysql < file`**,避免手工拼接字符串。

總結

cmd 下直接粘貼含引號 SQL 失敗是 **Shell 轉義層級不匹配** 導致。**用文件重定向** 是最省心、最兼容、最易維護的方式。

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