2017-11-29 38 views
0

私はいくつかのサーバーにインストールできるプロジェクトに取り組んでいます。私が遭遇する問題は、異なる照合のためにサーバーとテーブルを設定できることです。 1台のサーバーでは、エラーを受信し、私はだから私は、私はクエリにCOLLATE utf8_general_ciを追加することによって、それを固定思っPHP MySQLの照合の問題 - 結合テーブル

PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='

ました。私はそれがなくて、「ただ働き」を作るために私のクエリに何かできることがありますそれはそこに固定され、それが私のサーバー上で働いていたが、その後、他の誰かが自分のサーバー上でそれを実行しようとしたと

Syntax error or access violation: 1253 COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'

を受けMySQLサーバーの設定について心配する必要はありませんか?クエリは以下の通りで、いくつかのテーブルを結合します。私はクエリそのものだけを含んでおり、コード全体を含んでいませんでした。これはPDOの準備文です。

SELECT t.tid, a.clientid, tt.status, ts.showactive FROM TABLE1 t INNER JOIN TABLE2 a ON t.related_asset = a.id INNER JOIN TABLE3 tt ON tt.tid = t.tid INNER JOIN TABLE4 ts ON ts.title = tt.status WHERE ts.showactive = 1 

答えて

0

すべてのテーブルとの接続で一貫して良いだろう - すべて同じCHARACTER SETutf8latin1)とCOLLATION

クエリにCOLLATE utf8_general_ciを追加すると動作しますが、パフォーマンスは低下します。列が同じ照合順序(および2番目の例ではcharset)を持つ場合、索引を使用すると効率が向上します。

仕事をすることなく「正当な仕事」はありません。一貫性(上記と同じ)が最適です。そうしないと、ここやそこに複数のパッチが必要になります。

Trouble with UTF-8 characters; what I see is not what I stored

utf8は、MySQLの古いバージョンでOKですで "ベスト・プラクティス" を参照してください。絵文字と中国語を使用する場合は、代わりにutf8mb4を使用してください。

+0

これは遅れていますが、お返事いただきありがとうございます。スクリプトがサードパーティプログラムのアドオンになっているため、テーブルの一部を実際に制御できませんでした。私が最後にしたのは、他の2つのテーブルの照合に合ったテーブルを作成するスクリプトを変更することでした。つまり、サーバーにインストールされているユーザーは、照合エラーを回避する必要があります。 – CrunchyToast