ホームページ >php教程 >PHP开发 >PHP mysql 拡張 SQL クエリ中国語フィールド名ソリューション

PHP mysql 拡張 SQL クエリ中国語フィールド名ソリューション

高洛峰
高洛峰オリジナル
2016-12-01 14:52:012183ブラウズ

1. 質問:

データベースは MS SQLServer2000 です。SQLServer2000 のテーブルのデータを MySQL5 にインポートする必要があります (フィールド名として中国語を使用しないことを強くお勧めします)。 )。実際、この操作は SQL Server 上のレコードをクエリし、それらを MySQL に挿入することです。選択されたスクリプト言語は PHP です。PHP は MSSQL と MySQL の拡張機能を提供し、両方のデータベースの操作を容易にします。
SQLServer のテーブルのフィールド名が中国語であるという問題が発生し、作成されたクエリ ステートメントを SQLServe でテストするとレコードが返され、PHP の MSSQL 拡張クエリを使用するとエラーが報告されます。
インターネット上の情報を調べてみましたが、インターネット上には関連する情報があまりありません。PHP の MSSQL 拡張機能は SQL ステートメントで中国語をサポートしていないと考えています。情報を確認すると、PHP の MSSQL は SQL 内の中国語ステートメントをサポートしています。エラー報告の問題のほとんどは、エンコードの問題が原因で発生します。エンコード データベースとエンコードが、SQL Server のクエリ ステートメントの中国語部分が文字化けし、クエリが失敗します。

2. 解決策:

原因がわかったので、分析して解決し、一貫性のないコーディングの問題であることを確認します。解決策は次の手順に分かれています。
1. SQLServer データベースのエンコードが GBK であることを確認します。
2. 現在の PHP スクリプト ファイルのエンコードが UTF-8 であることを確認します。
3. SQL クエリ ステートメントのエンコーディングを変換します。
補足: 一部のネチズンは、データベースのエンコーディングと一致するように PHP スクリプト ファイルのエンコーディングを変換する必要があると述べています。その理由は、実際には、この手順は必要ありません。 PHP スクリプト ファイルに他の PHP スクリプトが含まれている場合は、すべての include または require スクリプト ファイルのエンコーディングも変換する必要があります。そうしないと、PHP スクリプトのエンコーディングが統一されず、エラーが発生しやすくなります。相互に関連するファイルがたくさんあると、これも非常に面倒で、事態が複雑になります。

3 番目の計画:

SQL を操作する前に、SQL ステートメントのエンコーディングを変換する変換関数を作成します。私のサンプルコードは以下に掲載されています:
コードをコピー コードは次のとおりです:
//エンコーディング変換関数
function utf8togb($s) {
return iconv('utf-8', 'gbk//IGNORE', $s) ; // 変換できない文字が見つかった場合、IGNORE パラメーターは無視されます
}
//以下の操作やエンコード変換、その他の問題を容易にするために、すべての中国語フィールドを英語のエイリアスに置き換えることをお勧めします
$sql="SELECT [id] , [列] を typeid として、[タイトル] をタイトルとして、[著者] を著者として、convert(text, [テキスト]) を本文として FROM [記事テーブル];";
$sql = utf8togb($sql);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。