PHP/PDO和SQL Server连接以及i18n问题

Vit*_*tov 5 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);
    
    Run Code Online (Sandbox Code Playgroud)

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

    SELECT field1 FROM tbl1 WHERE id=1
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. PDO odbc:

    $dbh = new PDO ('odbc:DSN=myDSN;UID='.$mssql_login.';PWD='.$mssql_pwd);
    
    Run Code Online (Sandbox Code Playgroud)

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


笔记:

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

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

Gre*_*reg 2

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

我不知道要匹配的字符集Cyrillic_General_CI_AS是什么,但尝试“西里尔字母”?