Để trả lời các câu hỏi của khách hàng, tài liệu này mô tả cách đặt HS_LANGUAGE
và HS_NLS_NCHAR
khi sử dụng DG4ODBC.
Nếu bạn đang sử dụng trình điều khiển Unicode ODBC chẳng hạn như trình điều khiển ODBC SQL Server, hãy đảm bảo các tham số và giá trị này có trong tệp init DG4ODBC của bạn:
HS_LANGUAGE = language_territory.code_page HS_NLS_NCHAR = UCS2
Thay thế ngôn ngữ , lãnh thổ và code_page với ngôn ngữ, lãnh thổ và trang mã Oracle® tương ứng với trang ngôn ngữ, địa điểm và mã của cơ sở dữ liệu của bạn.
Ví dụ:nếu cơ sở dữ liệu của bạn là SQL Server, ngôn ngữ và trang mã của nó là English (United States)
và 1252
, HS_LANGUAGE
của bạn tham số sẽ giống như sau:
HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252
HS_NLS_NCHAR
giá trị tham số yêu cầu DG4ODBC chuyển dữ liệu được mã hóa UCS-2 tới API Unicode ODBC, là ký tự mã hóa trạng thái tiêu chuẩn ODBC nên được sử dụng và do đó là ký tự mà Trình quản lý trình điều khiển unixODBC mong đợi.
Đồng thời đảm bảo rằng bạn đã đặt NLS_LANG
trước khi bắt đầu ứng dụng Oracle® của bạn. NLS_LANG
cho phép Oracle® biết bộ ký tự mà máy khách của bạn đang sử dụng. Ví dụ:
$ echo $LANG en_US.UTF-8 $ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus
Nếu bạn đang sử dụng trình điều khiển ANSI ODBC (không hỗ trợ lệnh gọi API ODBC rộng), bạn cần chỉ định bộ ký tự không phải UTF-8 trong HS_LANGUAGE
giá trị. Ví dụ:HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
. Nếu bạn không làm điều này và NLS_CHARACTERSET
của cơ sở dữ liệu Oracle® của bạn giá trị được đặt thành mã hóa UTF-8, ví dụ:AL32UTF8
, DG4ODBC:
- Sử dụng các API Unicode ODBC, ví dụ:
SQLDriverConnectW
, mà Trình quản lý trình điều khiển unixODBC ánh xạ tới ANSI tương đương của chúng (hoặc nếuHS_FDS_SHAREABLE_NAME
của bạn tham số trỏ đến đối tượng được chia sẻ trình điều khiển ODBC, khiến kết nối không thành công với lỗi "ký hiệu không xác định"). - Truyền dữ liệu được mã hóa UTF-8 tới API ODBC mà Trình quản lý trình điều khiển unixODBC không hỗ trợ. Kết nối không thành công vì DG4ODBC chuyển một chuỗi kết nối được mã hóa UTF-8 tới
SQLDriverConnectW
, mà Trình quản lý trình điều khiển unixODBC không thể xử lý.
Trình điều khiển ODBC Unicode
Trình điều khiển Unicode ODBC hỗ trợ API ODBC rộng, có dạng SQLxxxW. Để kiểm tra xem trình điều khiển ODBC của bạn có hỗ trợ API ODBC rộng hay không, hãy kiểm tra với nhà cung cấp trình điều khiển của bạn hoặc bật ghi nhật ký trình điều khiển ODBC, kết nối với DG4ODBC và kiểm tra tệp nhật ký kết quả. Ví dụ:
$ more /etc/odbc.ini [SQLSERVER_SAMPLE] . . . Logging=Yes LogFile=/tmp/mssql.log $ ./sqlplus / as sysdba $ select * from mytable@mssqllink; $ exit $ more /tmp/mssql.log . . . ENTRY: SQLGetInfoW: connection_handle...