PHP/PDO和SQL Server连接以及i18n问题
在我们的web应用程序中,我们使用PHP5.2.6+PDO连接到SQL Server 2005数据库并存储俄语文本 数据库排序规则为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
cyrlic\u General\u CI\u AS
,表排序规则为cyrlic\u General\u CI\u AS
,列类型为NVARCHAR(MAX)
我们尝试使用以下两种方案连接到数据库,这两种方案都会导致不同的问题
SELECT field1 FROM tbl1 WHERE id=1
显示被截断为255字节的field1
数据注:
- 在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', $_);