Dan*_*.P. 5 sql-server pdo connection-string database-connection dsn
如何强制此 ODBC 驱动程序以 UTF-8 编码?
我正在编写 PHP 5. 5. 应用程序,它使用 ODBC 驱动程序通过PDO连接到数据库 Microsoft SQL Server 2014 。更具体地说,我正在使用“ ODBC Driver 11 for SQL Server ”。
我在两个环境(平台)中运行应用程序:
为了配置 PDO 连接,我使用的是 DSN 源。要连接到 SQL 服务器,我使用以下命令:
$conn = new PDO("odbc:mssql_test", $user_name, $password);
Run Code Online (Sandbox Code Playgroud)
由于它是 PHP 应用程序,因此我需要以 UTF-8 编码返回来自 SQL 的数据。数据库中的数据有捷克字符,当数据不是用 UTF-8 编码时,这很棘手。
在生产平台上,一切正常。查询按预期返回(在 UTF-8 中)。
但是,我无法在 Windows 10(开发平台)上配置DSN,以获取 UFT-8 中的数据(似乎我正在获取在 win1250 中编码的数据),当捷克字符作为问号出现在结果中时这一点值得注意询问。
要配置 DSN,我正在使用位于以下位置的 Windows DSN 管理工具:
C:\Windows\System32\odbcad32.exe
Run Code Online (Sandbox Code Playgroud)
我将 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");
Run Code Online (Sandbox Code Playgroud)
或(以下代码有效,但在 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);
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!
3 个月后编辑 我最终切换到 FreeTDS 和 Linux 进行开发和生产环境。目前似乎不可能在使用 PHP 5.5 时将 ODBC 驱动程序 11 配置为以 UTF-8 编码。在 Windows 10 上...
小智 7
在 Windows 上使用 ODBC 时,数据库客户端字符集在非 Unicode 应用程序的语言设置中定义。SQL Server 客户端使用当前的 ANSI 代码页 (ACP)。
在 Windows 10 上,单击“开始”并键入“区域”,选择“区域和语言设置”,然后单击“管理语言设置”。单击更改系统区域设置并选中使用 unicode UTF-8 ...
这应该够了吧。