php - PHP 上 SAP HANA UTF8 的最后一个字符问题
问题描述
由于某种原因,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 Box 上的结果(仅在数据源中更改了 DRIVER={HDBODBC})
{
MANDT: "000",
SPRAS: "1",
MMSTA: "01",
MTSTB: "因采购/仓库而被冻结",
ZMODIFIEDTS: "20200120110440737"
}
所以不知何故,只有最后一个字符被搞砸了。
有什么建议么?
PS:我正在使用版本 2.4.182.1579711187 的 HDBclient 驱动程序,并尝试过版本 2.0.62.1478878744 有同样的问题。
解决方案
我就此向 PHP.net 提交了一个错误: https ://bugs.php.net/bug.php?id=79217
我还发现了另一个有趣的信息:我正在查询的字段在 HANA 中设置为 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
推荐阅读
- flutter - Flutter:CustomPainter 绘制方法被多次调用,而不是只调用一次
- python - 你好,我如何解决这个 sqlalchemy 传递 URI 错误?
- python - 计算数组中从 x 到 x 个周期的变化
- javascript - 如何加快nodejs中的函数调用
- javascript - 滑块自动滚动
- reactjs - 如何在非反应模块中使用 moment() 库(对于 React 项目)?
- javascript - 如何为对象数组中的每个对象添加带有值的键?
- bigcommerce - 添加新的付款方式
- python - 使用 openpyxl 更新多个列和行大小
- r - R:为什么 stat_function 采用随机(?)非整数值而不是“x”