TL;TR
如何强迫这个ODBC驱动程序在UTF-8中编码?
详细描述
我正在编写PHP5.5.应用程序,它使用驱动程序通过ODBC连接到数据库Microsoft 2014。更具体地说,我使用的是“Server的ODBC驱动程序11 ”。
我在两个环境(平台)中运行应用程序:
为了配置PDO连接,我使用DSN源。要连接到SQL服务器,我使用下面的命令:
$conn = new PDO("odbc:mssql_test", $user_name, $password);因为它是PHP应用程序,所以我要求以UTF-8编码方式返回来自SQL的数据。当数据没有用UTF-8编码时,数据库中的数据具有捷克字符,这是很棘手的。
在生产平台上,一切正常工作。查询按预期返回(在UTF-8中)。
但是,我无法在 10 (开发平台)上配置DSN,以获得UFT-8中的数据(似乎正在获取win1250中编码的数据),当查询结果中捷克字符作为问号出现时,这一点非常明显。
要配置DSN,我使用Windows管理工具,位于:
C:\Windows\System32\odbcad32.exe我将DSN添加到制表系统DSN,但没有设置编码的选项。
是否有任何方法或方法在Windows10上获取UTF-8中的数据(而不使用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个月的编辑,i最终切换到FreeTDS和Linux开发以及生产环境。目前,在使用PHP5.5时,将ODBC驱动程序11配置为在UTF-8中编码似乎是不可能的。在Windows 10上。
发布于 2018-09-05 13:32:23
在Windows上使用ODBC时,数据库客户端字符集是在非Unicode应用程序的语言设置中定义的。Server客户端使用当前ANSI代码页(ACP)。
在Windows10上,单击“Start”并键入“Region”,选择“Region & language settings”,然后单击“管理语言设置”。单击Change system locale并检查使用unicode UTF-8 .
这应该能起作用。
https://stackoverflow.com/questions/34205727
复制相似问题