问题描述
在我们的网络应用中,我们使用 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.
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 问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!