1

请问,我应该怎么做才能将 UTF-8 的数据存储到 SQL Server (2005) 中,对吗?我的 html 页面是 UTF-8 编码的,表中的列是 nvarchar 类型,连接字符集设置为 UTF-8,但俄语字符串 'Логистика Другое' 存储为 '????????? ??????' 入表。我正在使用 sqlsrv v2。这是连接参数:

$dbConnParams = array('server' => "server", // SQL Server
                      'params' => array("Database"      => "dbname",
                                        "UID"           => 'user',
                                        "PWD"           => 'pass',
                                        "CharacterSet"  => 'UTF-8'));

$dbh = sqlsrv_connect($dbConnParams['server'], $dbConnParams['params']);

(php 5.2.17, iis7.5, ms sql server 2005, sqlsrv 2)

4

2 回答 2

1

是历史原因造成的,我们使用 odbc 时没有绑定参数:

$sql = "usp_cis_upd
            @Key = " . $key . ",
            @Name = '" . $name . "'";
odbc_exec($dbh, $sql);

如果绑定了参数,则重新编码并很好地保存字符串:

$sql = "usp_cis_upd
            @Key = ?,
            @Name = ?";

$params = array($Key,
                $Name);

$stmt = sqlsrv_query($dbh, $sql, $params);
于 2012-04-25T08:55:04.017 回答
0

很可能是您的数据库设置有问题。存储数据的列需要有 Unicode 排序规则,否则将不接受 Unicode 字符,从而产生问号。

在您的数据库中使用 UTF-16 可能会解决您的问题。更深入的原因,请参见:http: //blogs.msdn.com/b/qingsongyao/archive/2009/04/10/sql-server-and-utf-8-encoding-1-true-or -false.aspx

于 2012-04-24T23:00:54.623 回答