TL;TR
怎么样力this ODBC driver以 UTF-8 编码?
详细说明
我正在编写 PHP 5. 5. 应用程序,该应用程序通过使用 ODBC 驱动程序的 PDO 连接到数据库 Microsoft SQL Server 2014。更具体地说,我正在使用“ODBC Driver 11 for SQL Server”。
我在两个环境(平台)中运行应用程序:
- 生产 - Linux/Ubuntu/Appache PHP/UnixODBC
- 开发 - Windows 10/Wamp
为了配置 PDO 连接,我使用 DSN 源。要连接到 SQL 服务器,我使用以下命令:
$conn = new PDO("odbc:mssql_test", $user_name, $password);
由于它是 PHP 应用程序,因此我要求 SQL 中的数据以 UTF-8 编码返回。数据库中的数据包含捷克字符,当数据未采用 UTF-8 编码时,这很棘手。
在生产平台上,一切正常。查询按预期返回(以 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
,因为它是唯一的开发问题或 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 Server 客户端使用当前的 ANSI 代码页 (ACP)。
在 Windows 10 上,点击开始并输入区域,选择区域和语言设置,然后点击管理语言设置>。单击更改系统区域设置并选中使用 unicode UTF-8 ...
这应该可以解决问题。
关于sql-server - 在 Windows 10 上为 SQL Server 的 ODBC Driver 11 设置 DSN 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205727/