sql-server - 在 Windows 10 上为 SQL Server 的 ODBC Driver 11 设置 DSN 编码

标签 sql-server pdo database-connection connection-string dsn

TL;TR

怎么样力this ODBC driver以 UTF-8 编码?

详细说明

我正在编写 PHP 5. 5. 应用程序,该应用程序通过使用 ODBC 驱动程序的 PDO 连接到数据库 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 编码返回。数据库中的数据包含捷克字符,当数据未采用 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 方式,例如 iconvmb_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/

相关文章:

sql-server - 在 T-SQL 中如何显示给定表名的列?

sql-server - 通过联接表查找聚合-SQL SERVER

SQL 字符串与 EXCEPT 的相等比较

php - 如何关闭 mysqli_result::fetch_assoc() 的转换行为?

php - 在 pdo 中绑定(bind)多个数组

sql-server - 一个非常简单的T-SQL语句语法错误

php - PDO 获取停止工作,直到创建新连接

c++ - 无法在 C++ 中打开包含文件 "sqlapi.h"?

tomcat - 如何将 Connector/J Jar 复制到 Amazon EC2 上 Tomcat7 的 lib 文件夹?

python - Django mysqlclient 后端在 Windows 中产生 django.db.utils.OperationalError : (2059, <NULL>)