我正在通过 ODBC 从 PHP 访问 FileMaker 数据库。
每当文本字段包含 unicode 字符时,这些字符都会被正确读取,但字符串的最后一个字符会丢失。
例如:“München”变成“Münche”
一些实验告诉我,对于每一个非 ASCII 字符,都会从末尾截断一个字符。(“Müünchen”变成“Müünch”)。
请注意,写入 FileMaker DB 工作得很好(所有字符都出现在那里),就像从我用于测试的 MySQL DB 中读取和写入一样。只有当通过 ODBC 从 FileMaker 中读取数据时,它才会被破坏。
我怀疑驱动程序,但是当我使用 odbc_result_all() 时,数据完全显示,所有字符都完好无损。所有其他函数(odbc_fetch_into()、odbc_fetch_array()、odbc_result() 等)返回截断的字符串。
我什至在https://github.com/php/php-src/blob/master/ext/odbc/php_odbc.c上查看了源代码,但我无法弄清楚 a) odbc_result_all() 做了什么不同,b)我如何将完整的字符串放入我的应用程序中?
额外细节:
- PHP 版本:PHP 7.3.8 (cli)(内置:2019 年 8 月 11 日 20:50:16)(NTS)
- 系统:MacOS 10.14.6
- ODBC 驱动程序:来自 FileMaker 的 fmodbc.so,配置选项:
- WideAPI = 是
- UnicodeTextTypes = 是
- 多字节编码 = UTF-8