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

PHP/PDO和SQL Server连接以及i18n问题,php,sql-server,sql-server-2005,Php,Sql Server,Sql Server 2005,在我们的web应用程序中,我们使用PHP5.2.6+PDO连接到SQL Server 2005数据库并存储俄语文本 数据库排序规则为cyrlic\u General\u CI\u AS,表排序规则为cyrlic\u General\u CI\u AS,列类型为NVARCHAR(MAX) 我们尝试使用以下两种方案连接到数据库,这两种方案都会导致不同的问题 PDO mssql: 在这种情况下,简单查询的结果如下: SELECT field1 FROM tbl1 WHERE id=1 显示被截断为2

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

数据库排序规则为
cyrlic\u General\u CI\u AS
,表排序规则为
cyrlic\u General\u CI\u AS
,列类型为
NVARCHAR(MAX)

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

  • PDO mssql:

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

    SELECT field1 FROM tbl1 WHERE id=1
    
    显示被截断为255字节的
    field1
    数据

  • PDO odbc:

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


  • 注:

    • 在SQL Management Studio中,数据不会被截断,俄文符号也会正确显示
    • 我们有Windows 2003企业版SP2

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

    我一直都很幸运地全面使用utf8\u general\u ci—用于连接、排序—一切

    然而,我只有MySQL和PostgreSql的经验,而不是SQL Server

    至于你的DSN问题-我不确定


    祝你好运

    连接后,尝试执行
    设置名称“charset”


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

    如果没有设置PDO,请使用-aka procedural mssql调用。在PDO修复之前,这是推荐的解决方法之一。自从PHP5.1.2以来,FreeTDS有一个问题。

    我也注意到了同样的问题,使用PDO实现SQLServer2005和PHP5.x。当我将nvarchar(MAX)字段更改为nvarchar(255)时,奇怪的问号字符不再出现。我确信这与PDO和MS SQL server中的ODBC驱动程序有关。当您在varchar中隐式指定最大字符数时,问题就解决了

    我必须这样做才能从MSSQL中的NVARCHAR字段中获取可用数据:

    $_ = iconv('Windows-1252', 'UTF-8', $_);
    

    感谢您的回复,但问题肯定出在PHP/PDO中——因为当我们连接到.NET中的同一个数据库时,一切都正常。
    $dbh = new PDO ('odbc:DSN=myDSN;UID='.$mssql_login.';PWD='.$mssql_pwd);
    
    $_ = iconv('Windows-1252', 'UTF-8', $_);