Последняя проблема с символами в SAP HANA UTF8 на PHP - PullRequest
2 голосов
/ 25 января 2020

По какой-то причине последний символ строки UTF8 запутывается, но только на linux. Отлично работает на windows. Вот код:

<?php
header('Content-type: text/plain;Charset=UTF-8;');
$datasource = 'DRIVER=/usr/sap/hdbclient/libodbcHDB.so;SERVERNODE=myserver:30041;CHAR_AS_UTF8=TRUE;';
$username   = "myuser";
$password   = "mypass";

$conn   = odbc_connect($datasource, $username, $password, SQL_CUR_USE_ODBC);

if (!($conn)) {
    exit("Connection Failed: " . $conn);
} 
else {
    $sql = 'select * from sltschema.t141t';
    $rs  = odbc_exec($conn,$sql);
    if (!$rs) {
        exit("Error in SQL");
    }       
    while ($rec=(array)odbc_fetch_array($rs)) {
        echo json_encode($rec).PHP_EOL;
        break;
    }
    odbc_close($conn);
}
?>

Вот результаты на моем CENTOS Linux поле (обратите внимание на последний символ в MTSTB)

{
MANDT: "000",
SPRAS: "1",
MMSTA: "01",
MTSTB: "因采购/仓库而被冻hp",
ZMODIFIEDTS: "20200120110440737"
}

Вот результаты на моем Windows Поле (только измененный DRIVER = {HDBODBC} в источнике данных)

{
MANDT: "000",
SPRAS: "1",
MMSTA: "01",
MTSTB: "因采购/仓库而被冻结",
ZMODIFIEDTS: "20200120110440737"
}

Так что каким-то образом только последний символ испортился.

Есть предложения?

PS: I Я использую версию 2.4.182.1579711187 драйвера HDBclient и пробовал версию 2.0.62.1478878744 с той же проблемой.

1 Ответ

1 голос
/ 04 февраля 2020

Я отправил сообщение об ошибке PHP. net: https://bugs.php.net/bug.php?id=79217

Я также нашел еще один интересный бит информации: поле, к которому я обращаюсь, установлено на nvarchar (25) в Хану. Если я приведу его как nvarchar (50), он будет работать.

тестовый запрос:

select cast(mtstb as nvarchar(50)) mtstb  from sltschema.t141t

Результаты:

Mtstb
因采购/仓库而被冻结
因任务清单/BOM而被冻结
MPN:BOM抬头冻结
gesp. für Besch./Lager
gesp. für Arb.plan/Stückl
...