通过 php-odbc 连接时如何修复编码?

How to fix encoding when connecting via php-odbc?

通过 PHP 中的 odbc_connect 连接 Microsoft Access 数据库,如下所示:

$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=mydatabase.mdb;Client_CSet=UTF-8;Server_CSet=UTF-8", "", "");

像这样执行查询:

odbc_exec($conn, "INSERT INTO mytable (id, name) VALUES ('1', 'Звезда')");

在 Microsoft Access 中打开数据库。俄文字母显示如下:

---------------------
id | name
---------------------
1  | Звезда

PHP-文件采用 UTF-8 编码。所以单词“Звезда”有UTF-8表示。 Windows 非 unicode 程序 的系统语言环境是 Windows-1251。

如何在通过 odbc 连接时修复编码?

PHP-ODBC 不是 Unicode 驱动程序。所以 PHP 将连接视为仅 ASCII。您无法通过 PHP-ODBC 将 Unicode 字符发送到数据库。

唯一的解决方法是在 Windows 10 区域设置[中打开选项“使用 Unicode UTF-8 获得全球语言支持” =17=](注意:此实验性功能在 Windows 10 之前不可用)。在这种情况下 Windows 10 对非 Unicode 程序使用宽字符串 API。