「SET NAMES」を使用するかどうか質問する

「SET NAMES」を使用するかどうか質問する

O'Reillyの「High performance MySQL」を読んでいて、次のようなことに気付きました。

もう一つのよくあるガベージ クエリは SET NAMES UTF8 ですが、これはとにかく間違った方法です (クライアント ライブラリの文字セットは変更されず、サーバーにのみ影響します)。

クエリが utf8 でエンコードされていることをデータベースに知らせるために、すべてのスクリプトの先頭に「SET NAMES utf8」と記述していたので、少し混乱しています。

上記の引用についてコメントできる方はいらっしゃいますか。もっと正式に言えば、データベース ワークフローが Unicode 対応であることを保証するための提案やベスト プラクティスは何ですか。

関連する場合、私のターゲット言語は PHP と Python です。

ベストアンサー1

mysql_set_charset()選択肢となるだろうが、選択肢はext/mysql。 のためにext/mysqliそれはmysqli_set_charsetそしてPDO::mysql接続パラメータを指定する必要があります。

この関数を使用すると MySQL API 呼び出しが行われるため、クエリを発行するよりもはるかに高速であると考えられます。

パフォーマンスの観点から、スクリプトとMySQLサーバー間のUTF-8ベースの通信を確実にする最も早い方法は、MySQLサーバーを正しく設定することですSET NAMES x同等

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

SET character_set_connection = x内部的にも実行され、設定SET collation_connection = <<default_collation_of_character_set_x>>することもできますこれらのサーバー変数あなたの に静的にmy.ini/cnf

同じ MySQL サーバー インスタンス上で実行され、他の文字セットを必要とする他のアプリケーションで問題が発生する可能性があることに注意してください。

おすすめ記事