Неправильные символы при использовании соединения PDO ODBC с DB2 в Windows - PullRequest
0 голосов
/ 06 июня 2019

Я настраиваю новый сервер и обновляю старый скрипт (PHP 5+) до PHP 7.

Я подключаюсь к базе данных DB2 через PDO ODBC и читаю CHARполе с CCSID 870 и сохранение его в поле среднего текста MySQL в таблице с CHARSET=utf8.Но я получил неправильные символы в базе данных MySQL и в консоли PHP.

Я пытался переключиться на odbc_connect(), как старый скрипт, но результаты были такими же.

Даже при сохранении поля вв текстовом файле результаты те же.

utf8_encode & utf8_decode не помогает.

Вот пример кода:

$as = new PDO("odbc:MYODBC",$user, $psw);
$as->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$res = $as->query("SELECT FIELD FROM MYTABLE");
$rows = $res->fetchAll();

$mysql = new PDO("mysql:host=srvip;dbname=mydbname;charset=utf8",$user, $psw);
$mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$mysql->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$mysql->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$ins = $mysql->prepare("INSERT INTO my_MySQL_TABLE (FIELD) VALUES (?)");
$ins->execute(array(trim($rows[0]["FIELD"])));

Я ожидаюрезультаты на MySQL будут Wąż, но фактический результат будет W?? или WÈØ.

Изменить на 2019-06-06

| Source           | String | HEX        |
|------------------|--------|------------|
| DB2              | Wąż    | E6A0B2     |
| MySQL            | W??    | 573F3F     |
| MySQL C/P Insert | Wąż    | 57C485C5BC |

Последняя версияПростое копирование-вставка в MySQL с использованием графического интерфейса пользователя

Редактирование на 2019-06-07

C:\Users\ME\>echo %DB2CODEPAGE%
1208

C:\Users\ME\>acs.exe /PLUGIN=cldownload /system=MYSYS /sql="SELECT FIELD as char,HEX(FIELD) as hex FROM TABLE" /display=1
CHAR   HEX                                                                                                                                                    
W??    E6A0B2                                                                                                                                                 

Если я использую /clientfile=test.txt вместо /display=1 Notepad ++, покажите мне файл как UTF-8

...