本文介绍了PHP/PDO 和 SQL Server 连接和 i18n 问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In our web-app we use PHP5.2.6 + PDO to connect to a SQL Server 2005 database and store Russian texts.

数据库排序为Cyrillic_General_CI_AS,表排序为Cyrillic_General_CI_AS,列类型为NVARCHAR(MAX).

Database collation is Cyrillic_General_CI_AS, table collation is Cyrillic_General_CI_AS, column type is NVARCHAR(MAX).

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

We tried connecting to a database using two following schemes, both causing different problems.

  1. PDO mssql:

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

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

in which case a result of a simple query like that:

SELECT field1 FROM tbl1 WHERE id=1

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

shows field1 data truncated to 255 bytes.

PDO odbc:

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

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

in which case a result of the same query shows full not truncated data but with question marks instead of Russian symbols.

注意事项:


Notes:

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

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

So what should we choose as a connection method and how to fix corresponding issues?

推荐答案

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

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

I don't know what the charset to match Cyrillic_General_CI_AS is, but try "Cyrillic"?

这篇关于PHP/PDO 和 SQL Server 连接和 i18n 问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 07:12
查看更多