为 Windows 10 上的 SQL 服务器设置 ODBC 驱动程序 11 的 DSN 编码

Set DSN encoding for ODBC Driver 11 for SQL Server on Windows 10

TL;TR

如何强制 this ODBC driver 以 UTF-8 编码?

详细说明

我正在写 PHP 5. 5. 通过 PDO 使用 ODBC 驱动程序 连接到数据库 Microsoft SQL Server 2014 的应用程序。更具体地说,我正在使用“ODBC Driver 11 for SQL Server”。

我运行两个环境(平台)的应用:

  1. 生产 - Linux/Ubuntu/Appache PHP/UnixODBC
  2. 发展 - Windows 10/Wamp

要配置 PDO 连接,我使用的是 DSN 源。要连接到 SQL 服务器,我使用以下命令:

$conn = new PDO("odbc:mssql_test", $user_name, $password);

因为它是 PHP 应用程序,我需要来自 SQL 的数据以 UTF-8 编码 returned。数据库中的数据有捷克字符,当数据未以 UTF-8 编码时,这很棘手。

在生产平台上,一切正常。 查询 return 符合预期(UTF-8)。

但是,我无法在 Windows 10(开发平台)上配置 DSN,以获取 UFT-8 中的数据(似乎 我正在获取在 win1250) 中编码的数据,当捷克字符在查询结果中作为问号出现时值得注意。

要配置 DSN,我正在使用 Windows DSN 管理工具,位于:

C:\Windows\System32\odbcad32.exe

我在系统 DSN 选项卡中添加了 DSN,但没有设置编码的选项。

有什么方法或变通方法可以在 Windows 10 上以 UTF-8 格式获取数据(不使用 PHP 方式,例如 iconv, mb_convert_encoding, 因为它唯一的开发问题 resp. DSN 配置问题).

请注意,我试过类似的想法,但没有成功:

$conn = new PDO("odbc:mssql_test", $user_name, $password, array("charset" => "UTF-8"));
$conn->exec("set names utf8");

或(下面的代码有效,但未在 Windows 上获得 UTF-8)

$dsn = "odbc:DRIVER={ODBC Driver 11 for SQL Server};SERVER=$server_address};CHARSET=UFT-8";
$conn = new PDO($dsn, $user_name, $password);

非常感谢任何帮助!

3 个月后编辑 我最终切换到 FreeTDS 和 Linux 用于开发和生产环境。目前似乎不可能在使用 PHP 5.5 时将 ODBC 驱动程序 11 配置为以 UTF-8 编码。在 Windows 10...

在 Windows 上使用 ODBC 时,数据库客户端字符集在非 Unicode 应用程序的语言设置中定义。 SQL 服务器客户端使用当前 ANSI 代码页 (ACP)。

在 Windows 10 上,单击 开始 并键入 地区、select 地区& 语言设置 并单击管理语言设置。单击更改系统区域设置并勾选使用unicode UTF-8 ...

这应该可以解决问题。