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 サーバー 2005、sqlsrv 2)

4

2 に答える 2

1

これは、パラメーターをバインドせずに odbc を使用した歴史的な理由によるものです。

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

params がバインドされている場合、文字列は再コード化され、適切に保存されます。

$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 に答える