文件首頁
MySQL Connector/ODBC 開發人員指南
相關文件 下載本手冊
PDF (US Ltr) - 1.7Mb
PDF (A4) - 1.7Mb


MySQL Connector/ODBC 開發人員指南  /  Connector/ODBC 注意事項和提示  /  Connector/ODBC 錯誤與解決方案 (FAQ)

8.4 Connector/ODBC 錯誤與解決方案 (FAQ)

以下章節詳細說明一些常見的錯誤及其建議的修正或替代解決方案。如果您仍然遇到問題,請使用 Connector/ODBC 郵寄清單;請參閱第 9.1 節,「Connector/ODBC 社群支援」

許多問題可以透過將 Connector/ODBC 驅動程式升級到最新的可用版本來解決。在 Windows 上,請確保您已安裝最新版本的 Microsoft 資料存取元件 (MDAC)。

64 位元 Windows 和 ODBC 資料來源管理員

我已在 Windows XP x64 Edition 或 Windows Server 2003 R2 x64 上安裝 Connector/ODBC。安裝已成功完成,但 Connector/ODBC 驅動程式未出現在ODBC 資料來源管理員中。

這不是錯誤,而是與 Windows x64 版本處理 ODBC 驅動程式的方式有關。在 Windows x64 版本上,Connector/ODBC 驅動程式安裝在 %SystemRoot%\SysWOW64 資料夾中。但是,透過 Windows x64 版本中的管理工具控制台提供的預設ODBC 資料來源管理員位於 %SystemRoot%\system32 資料夾中,並且只會在此資料夾中搜尋 ODBC 驅動程式。

在 Windows x64 版本上,請使用位於%SystemRoot%\SysWOW64\odbcad32.exe 的 ODBC 管理工具,這將正確找到已安裝的 Connector/ODBC 驅動程式,並讓您能夠建立 Connector/ODBC DSN。

此問題最初回報為錯誤 #20301。

錯誤 10061 (無法連線到伺服器)

在連線或使用ODBC 資料來源管理員中的測試按鈕時,我收到錯誤 10061 (無法連線到伺服器)

此錯誤可能是由許多不同的問題所引起,包括伺服器問題、網路問題,以及防火牆和連接埠封鎖問題。如需更多資訊,請參閱無法連線到 [local] MySQL 伺服器

「未啟用交易」錯誤

使用交易時,會回報以下錯誤:未啟用交易

此錯誤表示您嘗試對不支援交易的 MySQL 資料表使用交易。當使用 InnoDB 資料庫引擎時,MySQL 中支援交易,這是 MySQL 5.5 和更高版本中的預設儲存引擎。在 MySQL 5.1 之前的 MySQL 版本中,您也可以使用BDB 引擎。

繼續之前,請檢查以下事項

  • 確認您的 MySQL 伺服器支援交易式資料庫引擎。使用SHOW ENGINES 來取得可用引擎類型的清單。

  • 確認您正在更新的資料表使用交易式資料庫引擎。

  • 確保您未在 DSN 中啟用停用交易選項。

Access 回報的 #DELETED# 記錄

當在連結資料表中插入或更新記錄時,Access 會將記錄回報為#DELETED#

如果插入或更新的記錄在 Access 中顯示為#DELETED#,則

  • 如果您使用的是 Access 2000,請從https://www.microsoft.com/en-in/download/details.aspx?id=21995取得並安裝最新的 (2.6 或更高版本) Microsoft MDAC (Microsoft 資料存取元件)。這修正了 Access 中的錯誤,即當您將資料匯出到 MySQL 時,未指定資料表和資料行名稱。

    此外,取得並套用 Microsoft Jet 4.0 Service Pack 5 (SP5),可在http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114 找到。這修正了在某些情況下,資料行在 Access 中被標記為#DELETED# 的問題。

  • 對於所有版本的 Access,請啟用 Connector/ODBC 傳回相符的資料列選項。對於 Access 2.0,也請啟用模擬 ODBC 1.0 選項。

  • 在您想要能夠更新的所有資料表中包含TIMESTAMP

  • 在資料表中包含主索引鍵。如果沒有,新的或更新的資料列可能會顯示為#DELETED#

  • 只使用DOUBLE 浮點欄位。當與單精確度浮點數比較時,Access 會失敗。症狀通常是新的或更新的資料列可能會顯示為#DELETED#,或者您無法找到或更新資料列。

  • 如果您使用 Connector/ODBC 連結到具有BIGINT 資料行的資料表,則結果會顯示為#DELETED。因應解決方案是

    • 使用TIMESTAMP 作為資料類型,再多一個虛擬資料行。

    • 在 ODBC DSN 管理員中的連線對話方塊中,選取將 BIGINT 資料行變更為 INT 選項。

    • 從 Access 中刪除資料表連結並重新建立。

    舊記錄仍然顯示為#DELETED#,但新新增/更新的記錄會正確顯示。

寫入衝突或資料列位置錯誤

我該如何處理寫入衝突或資料列位置錯誤?

如果您看到以下錯誤,請在 DSN 設定對話方塊中選取傳回相符的資料列選項,或指定OPTION=2 作為連線參數

Write Conflict. Another user has changed your data.

Row cannot be located for updating. Some values may have been changed
since it was last read.

從 Access 97 匯入

從 Access 97 將資料匯出到 MySQL 會回報語法錯誤

這個錯誤是 Access 97 和 Connector/ODBC 3.51.02 之前的版本特有的。請更新到最新版本的 Connector/ODBC 驅動程式以解決此問題。

從 Microsoft DTS 匯入

從 Microsoft DTS 將資料匯出到 MySQL 時,會回報 語法錯誤

只有在使用 TEXTVARCHAR 資料類型的 MySQL 資料表時才會發生此錯誤。您可以將 Connector/ODBC 驅動程式升級到 3.51.02 或更高版本來修正此錯誤。

來自 ODBC.NET 的 SQL_NO_DATA 例外狀況

當使用 ODBC.NET 搭配 Connector/ODBC,擷取空字串(長度為 0)時,會開始產生 SQL_NO_DATA 例外狀況。

您可以從 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243 取得解決此問題的修補程式。

SELECT COUNT(*) 的錯誤

在 Visual Basic 和 ASP 中使用 SELECT COUNT(*) FROM tbl_name 時會傳回錯誤。

發生此錯誤的原因是 COUNT(*) 運算式傳回的是 BIGINT,而 ADO 無法理解如此大的數字。請選取 將 BIGINT 資料行變更為 INT 選項(選項值為 16384)。

多步驟操作錯誤

當使用 AppendChunk()GetChunk() ADO 方法時,會傳回 多步驟操作產生錯誤。請檢查每個狀態值 錯誤。

當游標位置指定為 adUseServer 時,ADO 的 GetChunk()AppendChunk() 方法無法如預期般運作。另一方面,您可以使用 adUseClient 來克服此錯誤。

您可以在 http://www.dwam.net/iishelp/ado/docs/adomth02_4.htm 找到一個簡單的範例。

修改過的記錄錯誤

當編輯連結資料表上的記錄時,Access 會傳回 另一位使用者已修改您修改的記錄

在大多數情況下,可以透過執行下列其中一項操作來解決此問題:

  • 如果資料表不存在 主索引鍵,請為資料表新增一個。

  • 如果不存在時間戳記資料行,請新增一個。

  • 只使用雙精度浮點數欄位。某些程式在比較單精度浮點數時可能會失敗。

如果這些策略沒有幫助,請先從 ODBC 管理員(從 ODBCADMIN 請求記錄時取得的記錄)和 Connector/ODBC 記錄檔開始,以幫助您找出問題所在。如需指示,請參閱第 5.10 節「取得 ODBC 追蹤檔案」

在 Unix 或 Linux 下直接連結應用程式

當在 Unix 或 Linux 下將應用程式直接連結到 Connector/ODBC 程式庫時,應用程式會當機。

Unix 或 Linux 下的 Connector/ODBC 與直接應用程式連結不相容。若要連線到 ODBC 來源,請使用驅動程式管理員,例如 iODBCunixODBC

Microsoft Office 和 DATE 或 TIMESTAMP 資料行

Microsoft Office 套件中的應用程式無法更新具有 DATETIMESTAMP 資料行的資料表。

這是 Connector/ODBC 的已知問題。請確保欄位具有預設值(而不是 NULL)且預設值為非零值(也就是不是 0000-00-00 00:00:00)。

INFORMATION_SCHEMA 資料庫

當將 Connector/ODBC 5.x 連線到 MySQL 4.x 伺服器時,會傳回錯誤 1044 拒絕使用者 'xxx'@'%' 存取資料庫 'information_schema'

Connector/ODBC 5.x 設計用於 MySQL 5.0 或更高版本,利用 INFORMATION_SCHEMA 資料庫來判斷資料定義資訊。計畫在最終版本中支援 MySQL 4.1。

S1T00 錯誤

當呼叫 SQLTables 時,會傳回錯誤 S1T00,但我找不到 Connector/ODBC 的錯誤代碼清單中有此錯誤。

S1T00 錯誤表示 ODBC 系統中發生一般逾時,而不是 MySQL 錯誤。它通常表示您使用的連線已過期、伺服器太忙而無法接受您的請求,或伺服器已關閉。

Access 2000 中「資料表不存在」錯誤

當在 Access 2000 中連結到資料表,並以程式設計方式而不是透過資料表設計工具介面產生資料表連結時,您可能會收到有關資料表不存在的錯誤。

已知特定版本的 msjet40.dll 存在此問題。受影響的版本是 4.0.9025.0。恢復到較舊的版本將使您能夠建立連結。如果您最近更新了版本,請檢查 WINDOWS 目錄中是否有舊版本的檔案,並將其複製到驅動程式目錄。

批次陳述式

當我嘗試使用批次陳述式時,批次陳述式的執行失敗。

批次陳述式支援是在 3.51.18 中新增的。預設情況下,不會啟用批次陳述式的支援。請啟用選項 FLAG_MULTI_STATEMENTS,值為 67108864,或在 GUI 組態中選取允許多個陳述式旗標。MySQL 不支援使用預備陳述式的批次陳述式。

ADODB 和 Excel 的封包錯誤

當使用 ADODB 和 Excel 連線到 MySQL 伺服器時,應用程式有時會無法與伺服器通訊,且錯誤記錄檔中會出現 讀取通訊封包時發生錯誤

此錯誤可能與 PanteraSoft.com 的 Keyboard Logger 1.1 有關,已知該程式會干擾 MySQL Connector/ODBC 和 MySQL 之間的網路通訊。

外部聯結錯誤

當使用某些應用程式透過 Connector/ODBC 和外部聯結存取 MySQL 伺服器時,會回報有關外部聯結跳脫序列的錯誤。

這是 MySQL Connector/ODBC 的已知問題,它無法正確剖析「外部聯結跳脫序列」,如 Microsoft ODBC 規格中的規範。目前,即使驅動程式中沒有執行任何剖析來處理外部聯結跳脫序列,Connector/ODBC 在被要求提供 SQL_OJ_CAPABILITIES 時仍會傳回大於 0 的值。

希伯來文/CJK 字元

我可以使用 Connector/ODBC 5.1 將擴充字元(希伯來文/CJK)正確儲存在資料庫中,但是當我擷取資料時,文字的格式不正確,而且會出現亂碼字元。

當使用 ASP 和 UTF8 字元時,請將以下內容新增至您的 ASP 檔案,以確保正確編碼傳回的資料

Response.CodePage = 65001
Response.CharSet = "utf-8"

已安裝程式清單中的重複項目

在我的已安裝程式清單中有重複的 MySQL Connector/ODBC 項目,但我無法刪除其中一個。

當您升級現有的 Connector/ODBC 安裝,而不是移除然後安裝更新的版本時,可能會發生此問題。

警告

若要修正此問題,請使用任何可運作的解除安裝程式來移除現有的安裝;然後可能需要編輯登錄檔的內容。在嘗試編輯登錄檔內容之前,請務必備份登錄檔資訊。

值截斷為 255 個字元

當使用參數繫結提交帶有 UPDATE 的查詢時,我的欄位值被截斷為 255 個字元。

請確保為您的連線設定了 FLAG_BIG_PACKETS 選項。這會移除繫結參數的 255 個字元限制。

停用執行時資料

是否可以使用旗標停用執行時資料?

如果您不想使用執行時資料,請移除對應的呼叫。例如

SQLLEN ylen = SQL_LEN_DATA_AT_EXEC(10);
SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, &ylen);

會變成

SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, NULL);

此範例也會在呼叫 SQLBindCol() 時將 &ylen 取代為 NULL。

如需詳細資訊,請參閱 SQLBindCol() 的 MSDN 文件

AUTO_INCREMENT 資料行的 NULLABLE 屬性

當您呼叫 SQLColumns() 以取得 AUTO_INCREMENT 的資料表資料行時,結果集的 NULLABLE 資料行一律為 SQL_NULLABLE (1)

這是因為 MySQL 將此類資料行的 DEFAULT 值回報為 NULL。這表示,如果您將 NULL 值插入資料行中,您將取得資料表 auto_increment 計數器的下一個整數值。