Драйвер ODBC iSeries Access с unixodbc в Debian - неверные символы UTF-8 возвращаются из iSeries - PullRequest
0 голосов
/ 29 мая 2019

Использование драйвера ODBC ibm-iaccess-1.1.0.10-1.0.amd64 в Debian Linux.Когда я выполняю php sql-запрос и проверяю ответ, я вижу, что некоторые из возвращенных данных недействительны utf-8.

mb_check_encoding возвращает значение «ложь», и символ на экране в браузере Chrome является символом вопросительного знака с ромбом.

Это происходит в некоторых типах полей CHAR.

if(!mb_check_encoding($row["field"])) {
 ... exit with utf-8 error
}

Я могу обойти это, преобразовав UTF-8 в UTF-8:

mb_convert_encoding($row["field"], 'UTF-8', 'UTF-8');

/ etc / odbc.ini:

[as400]
Description = iSeries Access ODBC Driver
Driver = iSeries Access ODBC Driver
system = as400
Naming = 0
DefaultLibraries = *usrlibl
DefaultPkgLibrary = QGPL
DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512
ConnectionType = 0
CommitMode = 1
ExtendedDynamic = 1
AllowDataCompression = 1
AllowUnsupportedChar = 0
ForceTranslation = 1
Trace = 0
Charset = UTF-8

/ etc / odbcinst.ini:

Description=IBM i Access for Linux 64-bit ODBC Driver
Driver=/usr/lib/libcwbodbc.so
Setup=/usr/lib/libcwbodbcs.so
fileusage=1
dontdlclose=1

Кроме того, документирует ли IBM какой-либо из параметров odbc?Похоже, что это вслепую пытается параметры, пока что-то работает.

1 Ответ

0 голосов
/ 30 мая 2019

Однобайтовая установка OS / 400 всегда возвращает кодировку Latin1 через ODBC в Linux.Это из моего опыта с очень старыми версиями (V4).Я копался в документации несколько месяцев назад, и кажется, что UTF-8 предоставляет только DBCS-Install.

Я не могу сказать, верно ли это для текущих версий i.

...