【问题标题】:PHP sqlsrv 2 and UTF-8PHP sqlsrv 2 和 UTF-8
【发布时间】:2012-04-24 08:59:47
【问题描述】:

请问,我应该如何将 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)

【问题讨论】:

    标签: php sql-server windows iis


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      很可能是您的数据库设置有问题。存储数据的列需要有 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-06-01
        • 2014-03-10
        • 1970-01-01
        • 2011-11-13
        • 2010-12-16
        • 2012-06-22
        • 2011-07-19
        • 1970-01-01
        相关资源
        最近更新 更多