首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SSIS 連接 MySQL 最佳實踐:ODBC 方案解決 ADO.NET 相容性問題

     編輯:MySQL 綜合教學

SSIS 連接 MySQL 最佳實踐:ODBC 方案解決 ADO.NET 相容性問題

來源

原文:Matt Masson - MSFT (2009-01-07)

問題背景

SSIS ADO.NET Destination 早期支援 MySQL,但 2008 CTP 後版本變更導致不相容。官方已登記 Bug,暫時採用 ODBC 連接器繞過。

核心衝突:ANSI_QUOTES SQL_MODE

ADO.NET Destination 要求 MySQL 啟用 ANSI_QUOTES(雙引號作為識別符),否則生成 SQL 語法錯誤。

解決方案:ODBC + Session 級 SQL_MODE

  1. 建立使用 MySQL ODBC Driver 的 ADO.NET Connection Manager。
  2. 設定 RetainSameConnection = True(確保同一 Session)。
  3. Data Flow 前置 Execute SQL Task,執行:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES';
  1. Execute SQL Task 與 ADO.NET Destination 共用同一 Connection Manager。

為何避開 MySQL .NET Connector

該驅動 ParameterMarkerFormat 回傳值導致批次插入生成參數標記而非實際值:

Error: 0xC020844B
Description: ... syntax to use near '"name", "date", "type", "remark") VALUES (p1, p2, p3, p4), (p1,p2,p3,p4)...

官方決定不修復。替代方案:

  • DevArt dotConnect for MySQL(商業,據稱無此問題)。
  • ODBC Driver + 上述 Workaround(免費、穩定)。

部署檢查清單

  • [ ] 安裝 MySQL ODBC Unicode Driver (5.3+)。
  • [ ] SSIS 專案建立 ODBC 連線管理器,RetainSameConnection = True。
  • [ ] 控制流程:Execute SQL Task → Data Flow Task。
  • [ ] Execute SQL Task 設定 SET sql_mode=... 包含 ANSI_QUOTES。
  • [ ] 兩任務共用同一連線管理器。
  • [ ] Data Flow 中 ADO.NET Destination 正常映射欄位。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved