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