

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# ODBC 驅動程式的 2.x 和 1.x 版本之間的差異
<a name="odbc20-odbc10-driver-differences"></a>

本節說明 [ODBC 1.x 驅動程式](configure-odbc-connection.md)與 [ODBC 2.x 驅動程式](odbc20-install.md)之間的差異，並提供如何遷移至 2.x 驅動程式的指引。它說明可能會影響您應用程式的變更，以及如何解決這些變更。

## 要解決的主要差異
<a name="odbc20-migrate-key-differences"></a>

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

### DSN 和連線字串
<a name="odbc20-migrate-dsn"></a>
+ **檢閱您的 DSN 是否有可能已移除或重新命名的驅動程式選項。**ODBC 2.x 驅動程式不支援某些 ODBC 1.x 驅動程式選項。其他 已重新命名。如需詳細資訊，請參閱 [連線字串和 DSN 選項](#odbc20-migrate-connection-options)。
+ **`UseUnicode=true` 如果您的應用程式取決於寬字元類型代碼 (`SQL_WVARCHAR`、)，請設定 `SQL_WCHAR`。**在 ODBC 2.x 驅動程式中， `UseUnicode` 預設為 `false`，報告窄字元類型。
+ **將記錄設定移至 `[ODBC]`區段。**在 Linux 和 macOS 上， `LogLevel`和 `LogPath` 必須在 的全域`[ODBC]`區段中設定`odbc.ini`，而不是在個別 DSN 區段中設定。

### 查詢和結構描述
<a name="odbc20-migrate-query-schema"></a>
+ **包含在`SQLTables`類型篩選條件`EXTERNAL TABLE`中。**在 ODBC 2.x 中，Amazon Redshift Spectrum 資料表和資料共用資料表都會報告為 `EXTERNAL TABLE`。如果您`SQLTables`依類型篩選，請新增 `EXTERNAL TABLE` 以繼續查看這些物件。
+ **`INTERVAL``VARCHAR`為不支援間隔資料類型的應用程式轉換為 。**有些用戶端不支援 ODBC 間隔類型。對於這些用戶端，請在查詢中轉換 欄： `SELECT col::VARCHAR FROM ...`

### 應用程式碼
<a name="odbc20-migrate-application-code"></a>
+ **驗證查詢逾時設定。**ODBC 2.x `SQL_ATTR_QUERY_TIMEOUT`會根據 ODBC 規格正確強制執行。ODBC 1.x 無提示地忽略此設定。先前成功的長時間執行查詢現在可能會失敗，並出現逾時錯誤。視需要檢閱和調整您的逾時值。
+ **提供data-at-execution參數的資料長度。** 2.x 報告`SQL_NEED_LONG_DATA_LEN`為 `Y`(1.x 報告 `N`)。繫結`SQL_DATA_AT_EXEC`參數的應用程式現在必須在 中預先提供總資料長度`StrLen_or_IndPtr`。

## 連線字串和 DSN 選項
<a name="odbc20-migrate-connection-options"></a>

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


| 1.x 選項 | 2.x 對等 | 備註 | 
| --- | --- | --- | 
| MaxLongVarChar | MaxLongVarcharSize | 預設從 8190 變更為 65535。 | 
| ConnectionTimeout | LoginTimeout | 相同的連線逾時，已重新命名。預設為 0 （無逾時）。 | 
| VpcEndpointUrl | vpc\_endpoint\_url |  | 
| SSLCertPath | TrustStore 或 CaFile | 用於驗證伺服器的 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 ...`。
+ `TextAsLongVarchar`、`CheckCertRevocation`、`EnableAwsSdkLogs`、`UseLogPrefix`、`Locale`、`UseDeclareFetch`、`UseMultipleStatements`、`EnforceSingleStatement`、 `EnableTableTypes` – 目前版本中沒有同等項目。Amazon Redshift 團隊正在評估未來版本中這些選項的對等項目或替代方案。

如需支援 2.x 選項的完整清單，請參閱 [ODBC 驅動器選項](odbc20-configuration-options.md)。

## 資料類型變更
<a name="odbc20-migrate-data-types"></a>

下表顯示在 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\_WVARCHAR、SQL\_WCHAR、SQL\_WLONGVARCHAR)；預設 UseUnicode=true | 縮小類型 (SQL\_VARCHAR、SQL\_CHAR、SQL\_LONGVARCHAR)。UseUnicode=true 設定為還原各種類型。 | 
| GEOMETRY / GEOGRAPHY（做為 SQL\_C\_BINARY) | 十六進位編碼 ASCII 字串 | 原始二進位位元組 | 

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

## 遷移後疑難排解
<a name="odbc20-migrate-troubleshooting"></a>

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


| 徵狀 | 原因 | 處理方式 | 
| --- | --- | --- | 
| 結構描述瀏覽器中看不到外部資料表 | 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時，在 中設定長度值。 | 
| 不會產生驅動程式日誌 | LogLevel 和 LogPath 必須位於 的[ODBC]全域區段odbc.ini，而非個別 DSN 區段 | 將記錄設定從 DSN 移至 [ODBC]區段。 | 

## 從舊版 ODBC 2.x 升級
<a name="odbc20-migrate-upgrade-2x"></a>

如果您已執行較舊的 ODBC 2.x 版本，請升級至最新版本。如需所有版本的完整增強功能和錯誤修正清單，請參閱 GitHub 上的 [Amazon Redshift ODBC 驅動程式變更日誌](https://github.com/aws/amazon-redshift-odbc-driver/blob/main/CHANGELOG.md)。

## 其他資訊
<a name="odbc20-migrate-more-info"></a>
+ [設定 Amazon Redshift ODBC 驅動程式 2.x 版連線](odbc20-install.md)
+ [ODBC 驅動器選項](odbc20-configuration-options.md)
+ [Amazon Redshift ODBC 驅動程式變更日誌](https://github.com/aws/amazon-redshift-odbc-driver/blob/main/CHANGELOG.md)