View a markdown version of this page

ODBC 驅動程式的 2.x 和 1.x 版本之間的差異 - Amazon Redshift

Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊,請參閱部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

ODBC 驅動程式的 2.x 和 1.x 版本之間的差異

本節說明 ODBC 1.x 驅動程式ODBC 2.x 驅動程式之間的差異,並提供如何遷移至 2.x 驅動程式的指引。它說明可能會影響您應用程式的變更,以及如何解決這些變更。

要解決的主要差異

下列動作可解決最常見的遷移問題。大多數應用程式只需要其中一部分。

DSN 和連線字串

  • 檢閱您的 DSN 是否有可能已移除或重新命名的驅動程式選項。ODBC 2.x 驅動程式不支援某些 ODBC 1.x 驅動程式選項。其他 已重新命名。如需詳細資訊,請參閱 連線字串和 DSN 選項

  • UseUnicode=true 如果您的應用程式取決於寬字元類型代碼 (SQL_WVARCHAR、),請設定 SQL_WCHAR在 ODBC 2.x 驅動程式中, UseUnicode 預設為 false,報告窄字元類型。

  • 將記錄設定移至 [ODBC]區段。在 Linux 和 macOS 上, LogLevelLogPath 必須在 的全域[ODBC]區段中設定odbc.ini,而不是在個別 DSN 區段中設定。

查詢和結構描述

  • 包含在SQLTables類型篩選條件EXTERNAL TABLE中。在 ODBC 2.x 中,Amazon Redshift Spectrum 資料表和資料共用資料表都會報告為 EXTERNAL TABLE。如果您SQLTables依類型篩選,請新增 EXTERNAL TABLE 以繼續查看這些物件。

  • INTERVALVARCHAR為不支援間隔資料類型的應用程式轉換為 。有些用戶端不支援 ODBC 間隔類型。對於這些用戶端,請在查詢中轉換 欄: SELECT col::VARCHAR FROM ...

應用程式碼

  • 驗證查詢逾時設定。ODBC 2.x SQL_ATTR_QUERY_TIMEOUT會根據 ODBC 規格正確強制執行。ODBC 1.x 無提示地忽略此設定。先前成功的長時間執行查詢現在可能會失敗,並出現逾時錯誤。視需要檢閱和調整您的逾時值。

  • 提供data-at-execution參數的資料長度。 2.x 報告SQL_NEED_LONG_DATA_LENY(1.x 報告 N)。繫結SQL_DATA_AT_EXEC參數的應用程式現在必須在 中預先提供總資料長度StrLen_or_IndPtr

連線字串和 DSN 選項

下表顯示已在 ODBC 2.x 驅動程式中重新命名或具有直接對等項目的 ODBC 1.x 驅動程式選項。

1.x 選項 2.x 對等 備註
MaxLongVarChar MaxLongVarcharSize 預設從 8190 變更為 65535。
ConnectionTimeout LoginTimeout 相同的連線逾時,已重新命名。預設為 0 (無逾時)。
VpcEndpointUrl vpc_endpoint_url
SSLCertPath TrustStoreCaFile 用於驗證伺服器的 CA 憑證路徑。在 Windows 上,在 DSN 設定對話方塊的信任存放區欄位中設定此項目;對話方塊沒有CaFile欄位。如果兩者都已設定, TrustStore 會優先處理。

目前的 2.x 驅動程式不支援下列 1.x 選項。2.x 驅動程式會忽略它們,因此它們不會影響您的連線。從 DSN 中移除它們是選用的,但建議避免混淆。

  • SingleRowMode – 若要限制用戶端記憶體,請StreamingCursorRows改用 。

  • UseSystemTrustStore – 不支援。在 Windows 上,1.x 驅動程式可以針對 Windows 系統憑證存放區驗證伺服器憑證。2.x 驅動程式會根據 CA 憑證檔案進行驗證:預設會使用綁定的 Amazon Redshift 根憑證,或是您在 TrustStore或 中指定的檔案CaFile

  • BoolsAsChar – 如果您的應用程式依賴以 "0""1"字串 (SQL_VARCHAR) 傳回的 BOOLEAN 資料欄,請將資料欄轉換為查詢VARCHAR中的 ,例如 SELECT col::VARCHAR FROM ...

  • TextAsLongVarcharCheckCertRevocationEnableAwsSdkLogsUseLogPrefixLocaleUseDeclareFetchUseMultipleStatementsEnforceSingleStatementEnableTableTypes – 目前版本中沒有同等項目。Amazon Redshift 團隊正在評估未來版本中這些選項的對等項目或替代方案。

如需支援 2.x 選項的完整清單,請參閱 ODBC 驅動器選項

資料類型變更

下表顯示在 ODBC 2.x 中變更以符合 ODBC 規格的 Amazon Redshift 資料類型映射。大多數應用程式不受影響,因為它們會依索引或名稱繫結資料欄,而不是依類型代碼繫結資料欄。

Amazon Redshift 資料類型 ODBC 1.x ODBC 2.x
DOUBLE PRECISION SQL_FLOAT (6) SQL_DOUBLE (8)
INTERVAL YEAR TO MONTH SQL_VARCHAR (12)、文字 SQL_INTERVAL_YEAR_TO_MONTH (107),間隔結構
INTERVAL DAY TO SECOND SQL_VARCHAR (12)、文字 SQL_INTERVAL_DAY_TO_SECOND (110)、間隔結構
VARCHAR / CHAR / TEXT 廣泛類型 (SQL_WVARCHARSQL_WCHARSQL_WLONGVARCHAR);預設 UseUnicode=true 縮小類型 (SQL_VARCHARSQL_CHARSQL_LONGVARCHAR)。UseUnicode=true 設定為還原各種類型。
GEOMETRY / GEOGRAPHY(做為 SQL_C_BINARY) 十六進位編碼 ASCII 字串 原始二進位位元組

對於 GEOMETRY、 和 SUPER資料類型GEOGRAPHY, 傳回COLUMN_SIZE的值SQLColumns也會變更,現在會傳回 NULL,以根據 ODBC 規格指示未調整大小的資料欄。根據 配置緩衝的應用程式COLUMN_SIZE必須使用預設緩衝區大小來處理 NULL。

遷移後疑難排解

下表說明遷移後可能遇到的常見問題,以及如何解決這些問題。

徵狀 原因 處理方式
結構描述瀏覽器中看不到外部資料表 Spectrum 和資料共用資料表報告為 EXTERNAL TABLE 包含在SQLTables類型篩選條件EXTERNAL TABLE中。
間隔資料欄上的 pyodbc 錯誤 pyodbc 不支援 ODBC 間隔類型 在查詢VARCHAR中將間隔轉換為 。
字元資料會顯示為非預期的字元 (mojibake) UseUnicode 預設變更為 false。預期使用廣字元 (UTF-16) 資料的應用程式可能會錯誤地將窄字元位元組解譯為寬對,產生亂碼輸出。資料本身保持不變。 在 DSN UseUnicode=true中設定 ,或更新您的應用程式以繫結資料欄,SQL_C_CHAR而非 SQL_C_WCHAR
長時間執行的查詢會傳回逾時錯誤 SQL_ATTR_QUERY_TIMEOUT 現已強制執行。ODBC 1.x 無提示地忽略此設定。 QueryTimeout 從 DSN 中增加或移除,或在應用程式中將 SQL_ATTR_QUERY_TIMEOUT設定為 0。
設定SQL_ATTR_CURRENT_CATALOG傳回 HY011 屬性無法在開啟的連線上設定。不支援在開放連線上切換資料庫。 在連線之前設定 屬性,或關閉並重新開啟目標資料庫上的連線。
連線在雙堆疊環境中懸置 <= 2.1.16 版的限制 升級至 2.1.17 或更新版本。
錯誤訊息剖析會傳回非預期的結果 訊息格式已變更;SQLSTATE 程式碼不變 剖析 SQLSTATE 代碼而非訊息文字。
Data-at-execution參數繫結行為不同 SQL_NEED_LONG_DATA_LEN 從 FALSE 變更為 TRUE;使用 的應用程式現在SQL_DATA_AT_EXEC必須預先提供總資料長度 在繫結SQL_DATA_AT_EXEC參數StrLen_or_IndPtr時,在 中設定長度值。
不會產生驅動程式日誌 LogLevelLogPath 必須位於 的[ODBC]全域區段odbc.ini,而非個別 DSN 區段 將記錄設定從 DSN 移至 [ODBC]區段。

從舊版 ODBC 2.x 升級

如果您已執行較舊的 ODBC 2.x 版本,請升級至最新版本。如需所有版本的完整增強功能和錯誤修正清單,請參閱 GitHub 上的 Amazon Redshift ODBC 驅動程式變更日誌

其他資訊