Обсуждение: unicode vs non-unicode ODBC driver

Поиск
Список
Период
Сортировка

unicode vs non-unicode ODBC driver

От
the6campbells
Дата:

Consider a simple scenario.

CREATE DATABASE "TEST1"
  WITH OWNER = postgres
       ENCODING = 'WIN1252'
       LC_COLLATE = 'English, United States'
       LC_CTYPE = 'English, United States'
       CONNECTION LIMIT = -1;

CREATE TABLE z
(
  c1 character(6)
)

If you invoke sqlColumns the data type returned from the column changes depending on if you used the UNICODE or non-UNICODE driver. This is with the 8.04.01 driver.

Get Data All:
"TABLE_QUALIFIER", "TABLE_OWNER", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "PRECISION", "LENGTH", "SCALE", "RADIX", "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE", "DISPLAY_SIZE", "FIELD_TYPE", "AUTO_INCREMENT", "PHYSICAL NUMBER", "TABLE OID", "BASE TYPEID"
"TEST1", "public", "z", "c1", 1, "bpchar", 6, 6, <Null>, <Null>, 1, "", <Null>, 1, <Null>, 12, 1, <Null>, 6, 1042, 0, 1, 45819, 0
1 row fetched from 24 columns.


Get Data All:
"TABLE_QUALIFIER", "TABLE_OWNER", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "PRECISION", "LENGTH", "SCALE", "RADIX", "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE", "DISPLAY_SIZE", "FIELD_TYPE", "AUTO_INCREMENT", "PHYSICAL NUMBER", "TABLE OID", "BASE TYPEID"
"TEST1", "public", "z", "c1", -8, "bpchar", 6, 12, <Null>, <Null>, 1, "", <Null>, -8, <Null>, 12, 1, <Null>, 6, 1042, 0, 1, 45819, 0
1 row fetched from 24 columns.

Re: unicode vs non-unicode ODBC driver

От
Hiroshi Inoue
Дата:
the6campbells wrote:
>
> Consider a simple scenario.
>
> CREATE DATABASE "TEST1"
>   WITH OWNER = postgres
>        ENCODING = 'WIN1252'
>        LC_COLLATE = 'English, United States'
>        LC_CTYPE = 'English, United States'
>        CONNECTION LIMIT = -1;
>
> CREATE TABLE z
> (
>   c1 character(6)
> )
>
> If you invoke sqlColumns the data type returned from the column changes
> depending on if you used the UNICODE or non-UNICODE driver. This is with
> the 8.04.01 driver.
>
> Get Data All:
> "TABLE_QUALIFIER", "TABLE_OWNER", "TABLE_NAME", "COLUMN_NAME",
> "DATA_TYPE", "TYPE_NAME", "PRECISION", "LENGTH", "SCALE", "RADIX",
> "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE",
> "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION",
> "IS_NULLABLE", "DISPLAY_SIZE", "FIELD_TYPE", "AUTO_INCREMENT", "PHYSICAL
> NUMBER", "TABLE OID", "BASE TYPEID"
> "TEST1", "public", "z", "c1", 1, "bpchar", 6, 6, <Null>, <Null>, 1, "",
> <Null>, 1, <Null>, 12, 1, <Null>, 6, 1042, 0, 1, 45819, 0
> 1 row fetched from 24 columns.

It returns SQL_CHAR(=1).

> Get Data All:
> "TABLE_QUALIFIER", "TABLE_OWNER", "TABLE_NAME", "COLUMN_NAME",
> "DATA_TYPE", "TYPE_NAME", "PRECISION", "LENGTH", "SCALE", "RADIX",
> "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE",
> "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION",
> "IS_NULLABLE", "DISPLAY_SIZE", "FIELD_TYPE", "AUTO_INCREMENT", "PHYSICAL
> NUMBER", "TABLE OID", "BASE TYPEID"
> "TEST1", "public", "z", "c1", -8, "bpchar", 6, 12, <Null>, <Null>, 1,
> "", <Null>, -8, <Null>, 12, 1, <Null>, 6, 1042, 0, 1, 45819, 0
> 1 row fetched from 24 columns.

It returns SQL_WCHAR(=-8).

regards,
Hiroshi Inoue