繁体   English   中英

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

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

TL; TR

如何强制此ODBC驱动程序以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获取数据 (不使用像iconvmb_convert_encoding这样的PHP方式,因为它唯一的开发问题和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应用程序的语言设置中定义。 当前的ANSI代码页(ACP)由SQL Server客户端使用。

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

这应该够了吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM