Я настраиваю новый сервер и обновляю старый скрипт (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