PHP/PDO 和 SQL Server 连接和国际化问题

标签 php sql-server sql-server-2005

在我们的网络应用程序中,我们使用 PHP5.2.6 + PDO 连接到 SQL Server 2005 数据库并存储俄语文本。

数据库排序规则是Cyrillic_General_CI_AS,表排序规则是Cyrillic_General_CI_AS,列类型是NVARCHAR(MAX)

我们尝试使用以下两种方案连接到数据库,这两种方案都导致了不同的问题。

  1. PDO mssql:

    $dbh = new PDO ('mssql:host='.$mssql_server.';dbname='.$mssql_db, $mssql_login, $mssql_pwd);
    

    在这种情况下,像这样的简单查询的结果:

    SELECT field1 FROM tbl1 WHERE id=1
    

    显示截断为 255 字节的 field1 数据。

  2. PDO odbc:

    $dbh = new PDO ('odbc:DSN=myDSN;UID='.$mssql_login.';PWD='.$mssql_pwd);
    

    在这种情况下,同一查询的结果显示完整的未截断数据,但带有问号而不是俄语符号。


注意事项:

  • 在 SQL Management Studio 中,数据不会被截断,俄语符号也能正确显示。
  • 我们有 Windows 2003 Enterprise Edition SP2

那么我们应该选择什么样的连接方式以及如何解决相应的问题呢?

最佳答案

连接后尝试执行 SET NAMES "charset"

我不知道匹配 Cyrillic_General_CI_AS 的字符集是什么,但试试“Cyrillic”?

关于PHP/PDO 和 SQL Server 连接和国际化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/178530/

相关文章:

php - 使用 .htaccess 从 URL 中删除 PHP 文件扩展名

php - 从 php 表单操作输出 AJAX 响应的一部分

php - 如何从另一个网站(在完全不同的域中)统计一个网站的访问者

c# - 通过 ado.net 插入 DBGeography 类型的正确方法是什么

sql-server - SQL Server : How do I add a constraint to an existing table but only if the constraint does not already exist?

php - Laravel 5.4 在 Markdown Mailable 中错误地混合了 HTML 组件

sql-server - 如何在选择查询中不使用 GUI 的情况下判断数据库登录是否被禁用

java - Hibernate:如何连接表与不是外键的列

sql-server-2005 - T-Sql 查询来清理 varchar 列

sql - 交叉应用在 SQL Server 2005 中不起作用