在Windows 10上为SQL Server的ODBC驱动程序11设置DSN编码

问题描述 投票:4回答:1

TL; TR

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

详细说明

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

我在两个环境(平台)中运行应用程序:

  1. 制作 - Linux / Ubuntu / Appache PHP / UnixODBC
  2. 开发 - Windows 10 / Wamp

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

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

由于它是PHP应用程序,我需要以UTF-8编码返回SQL中的数据。数据库中的数据具有捷克字符,这在数据未以UTF-8编码时很棘手。

在生产平台上,一切正常。查询按预期返回(以UTF-8格式)。

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

要配置DSN,我使用的是位于以下位置的Windows DSN管理工具:

C:\Windows\System32\odbcad32.exe

我将DSN添加到标签System 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上...

sql-server pdo database-connection connection-string dsn
1个回答
3
投票

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

在Windows 10上,单击“开始”,键入“区域”,选择“区域和语言设置”,然后单击“管理语言设置单击Change system locale并选中Use unicode UTF-8 ...

这应该够了吧。

© www.soinside.com 2019 - 2024. All rights reserved.