今日、PHP を使用してデータベースを操作したところ、SQL Server 2008 データベースに挿入された中国語フィールドが文字化けしていることに気付きました。以下に私の初期状況をいくつか示します。
開発環境は php5.3.3+Apache2.2.17+SQL です。 Server 2008、PHPスクリプトファイルのエンコーディングはutf-8、データベースに渡されるエンコーディングはGB2312です(SQL Serverのデフォルトの文字エンコーディングはこれである可能性がありますが、私は公式に提供しているSQLSRVライブラリを使用しています)。 Microsoft はデータベースに接続します (追記: SQL Server 2005 以降、mssql.dll を使用した接続はサポートされなくなりました)。そのため、sqlsrv_query($conn, "set names GB2312") ステートメントを使用して、渡されるエンコード形式を設定します。 SQL ステートメントは次のように記述されます: insert into Opinion (content) names ('aaa Chinese content');
この SQL ステートメントを実行し、sqlsrv_errors() 関数を使用して実行が失敗したことを確認します。エラー メッセージが表示され、次の結果が得られます:
コードをコピーします コードは次のとおりです:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP) [1] => -46 [コード] => -46 [2] => クエリ文字列を UTF-16 に変換中にエラーが発生しました:
上記の文字化けをそのままコピーしてWebページに表示した結果です。 「クエリ文字列を UTF-16 に変換中にエラーが発生しました」から、文字エンコード変換の問題が原因であることがわかります。そこで、PHP の iconv 関数を使用して中国語のエンコード変換を強制し、SQL ステートメントを実行しました。 コードは次のとおりです。
コードをコピーします。 コードは次のとおりです。 $string = iconv(' utf-8', 'GB2312 //IGNORE', 'aaa Chinese content');
$sql = "opinion (content) 値 ($string) に挿入"
[code]
このとき、別のエラーが発生しました。が報告された場合、エラー メッセージは次のとおりです:
[code]
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] = > 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ��Ч�� [メッセージ] Microsoft][SQL Server Native Client 10.0][SQL Server]�� �� 'aaa��������' ��Ч�� ) )
このエラーメッセージについては手がかりがないので出力しましたSQL ステートメントを Web ページに送信して、SQL ステートメントが間違って記述されているかどうかを確認すると、出力結果は次のようになります:
コードをコピーします
コードは次のとおりです: Opinion (コンテンツ) 値に挿入します。 (aaa��������)
一見問題ないようですが、実は問題があります 問題は、最後の括弧内のパラメータを囲む必要があることに気づきました(文字列であることを示す) 引用符で囲まれているので、SQL ステートメントを再度変更しました。コードは次のとおりです:
コードをコピー
コードは次のとおりです: $sql = "insert into意見 (コンテンツ) 値 ( '".$string."')"; 明確に見るために、拡大してみます
$string を一重引用符で囲み、後で SQL ステートメントを実行できるようにします 成功、データベースに保存されている漢字は文字化けしません。
http://www.bkjia.com/PHPjc/325615.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/325615.html技術記事今日、php を使用してデータベースを操作したところ、SQL Server 2008 データベースに挿入された中国語フィールドが文字化けしていることがわかりました。 以下に、私の初期状況をいくつか示します。 開発環境は php5.3.3+Apache2.2.17 です...。