View a markdown version of this page

Perbedaan antara versi 2.x dan 1.x dari driver ODBC - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Perbedaan antara versi 2.x dan 1.x dari driver ODBC

Bagian ini menjelaskan perbedaan antara driver ODBC 1.x dan driver ODBC 2.x, dan memberikan panduan tentang cara bermigrasi ke driver 2.x. Ini menjelaskan perubahan yang mungkin memengaruhi aplikasi Anda dan cara mengatasinya.

Perbedaan utama untuk diatasi

Tindakan berikut menyelesaikan masalah migrasi yang paling umum. Sebagian besar aplikasi hanya membutuhkan sebagian dari ini.

DSN dan string koneksi

  • Tinjau DSN Anda untuk opsi driver yang mungkin telah dihapus atau diganti namanya. Beberapa opsi driver ODBC 1.x tidak didukung di driver ODBC 2.x. Lainnya telah diganti namanya. Lihat String koneksi dan opsi DSN untuk detail.

  • A UseUnicode=true tur apakah aplikasi Anda bergantung pada kode tipe karakter lebar (SQL_WVARCHAR,SQL_WCHAR). Di driver ODBC 2.x, UseUnicode default kefalse, yang melaporkan jenis karakter yang sempit.

  • Pindahkan pengaturan logging ke [ODBC] bagian. Di Linux dan macOS, LogLevel dan LogPath harus diatur di [ODBC] bagian globalodbc.ini, bukan di bagian DSN individu.

Kueri dan skema

  • Sertakan EXTERNAL TABLE dalam filter SQLTables tipe. Di ODBC 2.x, tabel Amazon Redshift Spectrum dan tabel datashare dilaporkan sebagai. EXTERNAL TABLE Jika Anda memfilter SQLTables berdasarkan jenis, tambahkan EXTERNAL TABLE untuk terus melihat objek ini. Atau, atur EnableTableTypes opsi ke 0 untuk menormalkan informasi tipe tabel terperinci ke dalam tipe tabel generik dan VIEW, seperti yang dijelaskan dalam item berikut.

  • Jenis tabel terperinci diaktifkan secara default. ODBC 2.x mengaktifkan EnableTableTypes opsi secara default. Driver 1.x menonaktifkan opsi ini secara default. Dengan default 2.x, SQLTables melaporkan tipe terperinci seperti TABEL SISTEM, TAMPILAN SISTEM, TABEL EKSTERNAL, dan TEMPORER LOKAL. Untuk melaporkan setiap tabel sebagai tipe generik TABEL dan setiap tampilan sebagai VIEW, atur EnableTableTypes ke 0.

  • Trans INTERVAL mis VARCHAR ikan ke untuk aplikasi yang tidak mendukung tipe data interval. Beberapa klien tidak mendukung tipe interval ODBC. Untuk klien tersebut, berikan kolom dalam kueri Anda: SELECT col::VARCHAR FROM ...

Kode aplikasi

  • Verifikasi pengaturan batas waktu kueri. ODBC 2.x memberlakukan dengan benar SQL_ATTR_QUERY_TIMEOUT sesuai spesifikasi ODBC. ODBC 1.x diam-diam mengabaikan pengaturan ini. Long-running kueri yang sebelumnya berhasil sekarang mungkin gagal dengan kesalahan batas waktu. Tinjau dan sesuaikan nilai batas waktu sesuai kebutuhan.

  • Berikan panjang data untuk parameter data-at-eksekusi. 2.x melaporkan SQL_NEED_LONG_DATA_LEN sebagai Y (1.x dilaporkanN). Aplikasi yang mengikat SQL_DATA_AT_EXEC parameter sekarang harus menyediakan panjang data total di depanStrLen_or_IndPtr.

String koneksi dan opsi DSN

Tabel berikut menunjukkan opsi driver ODBC 1.x yang telah diganti namanya atau memiliki ekuivalen langsung di driver ODBC 2.x.

Opsi 1.x 2.x setara Catatan
MaxLongVarChar MaxLongVarcharSize Default berubah dari 8190 menjadi 65535.
ConnectionTimeout LoginTimeout Batas waktu koneksi yang sama, diganti namanya. Defaultnya 0 (tidak ada batas waktu).
VpcEndpointUrl vpc_endpoint_url
SSLCertPath TrustStore atau CaFile Jalur ke sertifikat CA yang digunakan untuk memverifikasi server. Pada Windows, atur ini di bidang Trust Store dari dialog pengaturan DSN; dialog tidak memiliki CaFile bidang. Jika keduanya diatur, di TrustStore prioritaskan.

Opsi 1.x berikut tidak didukung di driver 2.x saat ini. Driver 2.x mengabaikannya, sehingga tidak mempengaruhi koneksi Anda. Menghapusnya dari DSN Anda adalah opsional tetapi disarankan untuk menghindari kebingungan.

  • SingleRowMode— untuk membatasi memori klien, gunakan sebagai StreamingCursorRows gantinya.

  • UseSystemTrustStore— tidak didukung. Pada Windows, driver 1.x dapat memvalidasi sertifikat server terhadap penyimpanan sertifikat sistem Windows. Driver 2.x memvalidasi terhadap file sertifikat CA: ia menggunakan sertifikat root Amazon Redshift yang dibundel secara default, atau file yang Anda tentukan di atau. TrustStore CaFile

  • TextAsLongVarchar,CheckCertRevocation,,EnableAwsSdkLogs,UseLogPrefix,Locale, UseDeclareFetchUseMultipleStatements, EnforceSingleStatement — tidak ada yang setara dalam rilis saat ini. Tim Amazon Redshift sedang mengevaluasi padanan atau alternatif untuk opsi ini di rilis mendatang.

Untuk daftar lengkap opsi 2.x yang didukung, lihatOpsi driver ODBC.

Perubahan tipe data

Tabel berikut menunjukkan pemetaan tipe data Amazon Redshift yang berubah di ODBC 2.x agar sesuai dengan spesifikasi ODBC. Sebagian besar aplikasi tidak terpengaruh karena mereka mengikat kolom berdasarkan indeks atau nama daripada dengan kode tipe.

Jenis data Amazon Redshift ODBC 1.x ODBC 2.x
DOUBLE PRECISION SQL_FLOAT(6) SQL_DOUBLE (8)
INTERVAL YEAR TO MONTH SQL_VARCHAR(12), teks SQL_INTERVAL_YEAR_TO_MONTH(107), struktur interval
INTERVAL DAY TO SECOND SQL_VARCHAR(12), teks SQL_INTERVAL_DAY_TO_SECOND(110), struktur interval
VARCHAR / CHAR / TEXT Jenis lebar (SQL_WVARCHAR,SQL_WCHAR,SQL_WLONGVARCHAR); default UseUnicode=true Jenis sempit (SQL_VARCHAR,SQL_CHAR,SQL_LONGVARCHAR). Set UseUnicode=true el untuk mengembalikan tipe yang luas.
GEOMETRY/GEOGRAPHY(sebagaiSQL_C_BINARY) Hex-encoded String ASCII Bytes biner mentah

COLUMN_SIZENilai yang dikembalikan oleh SQLColumns juga diubah untukGEOMETRY,GEOGRAPHY, dan tipe SUPER data, yang sekarang mengembalikan NULL untuk menunjukkan kolom yang tidak berukuran sesuai spesifikasi ODBC. Aplikasi yang mengalokasikan buffer berdasarkan COLUMN_SIZE harus menangani NULL dengan menggunakan ukuran buffer default.

Post-migration pemecahan masalah

Tabel berikut menjelaskan masalah umum yang mungkin Anda temui setelah bermigrasi dan cara mengatasinya.

Gejala Penyebab Apa yang harus dilakukan
Tabel eksternal tidak terlihat di browser skema Tabel spektrum dan datashare dilaporkan sebagai EXTERNAL TABLE Sertakan EXTERNAL TABLE dalam filter SQLTables tipe Anda, atau atur EnableTableTypes ke 0 untuk menormalkan tipe tabel terperinci ke dalam tipe TABLE dan VIEW generik.
kesalahan pyodbc pada kolom interval pyodbc tidak mendukung tipe interval ODBC Cantarkan interval ke VARCHAR dalam kueri.
Data karakter ditampilkan sebagai karakter tak terduga (mojibaker) UseUnicodedefault diubah menjadifalse. Aplikasi yang mengharapkan data wide-character (UTF-16) mungkin salah menafsirkan byte karakter sempit sebagai pasangan lebar, menghasilkan output yang kacau. Data itu sendiri tidak berubah. Setel UseUnicode=true di DSN Anda, atau perbarui aplikasi Anda untuk mengikat kolom sebagai alih- SQL_C_CHAR alihSQL_C_WCHAR.
Long-running kueri mengembalikan kesalahan batas waktu SQL_ATTR_QUERY_TIMEOUTsekarang dipaksakan. ODBC 1.x diam-diam mengabaikan pengaturan ini. Tingkatkan atau hapus QueryTimeout dari DSN Anda, atau setel SQL_ATTR_QUERY_TIMEOUT ke 0 di aplikasi Anda.
Pengaturan pengem SQL_ATTR_CURRENT_CATALOG balian HY011 Atribut tidak dapat diatur pada koneksi terbuka. Mengalihkan database pada koneksi terbuka tidak didukung. Tetapkan atribut sebelum menghubungkan, atau tutup dan buka kembali koneksi pada database target.
Koneksi macet di lingkungan dual-stack Batasan dalam versi <= 2.1.16 Tingkatkan ke 2.1.17 atau yang lebih baru.
Penguraian pesan kesalahan mengembalikan hasil yang tidak terduga Format pesan berubah; kode SQLSTATE tidak berubah Parse kode SQLSTATE alih-alih teks pesan.
Data-at-execution pengikatan parameter berperilaku berbeda SQL_NEED_LONG_DATA_LENdiubah dari FALSE menjadi TRUE; aplikasi SQL_DATA_AT_EXEC yang menggunakan sekarang harus memberikan total panjang data di muka Tetapkan nilai panjang StrLen_or_IndPtr saat mengikat SQL_DATA_AT_EXEC parameter.
Log driver tidak dihasilkan LogLeveldan LogPath harus berada di bagian [ODBC] globalodbc.ini, bukan di bagian DSN individu Pindahkan pengaturan logging dari DSN Anda ke [ODBC] bagian.

Upgrade dari versi ODBC 2.x yang lebih lama

Jika Anda sudah menjalankan versi ODBC 2.x yang lebih lama, tingkatkan ke rilis terbaru. Untuk daftar lengkap penyempurnaan dan perbaikan bug di semua versi, lihat log perubahan driver ODBC Amazon Redshift. GitHub

Informasi selengkapnya