以下は、異なるキャラクタ セットを使用している MySQL サーバ間でのレプリケーションに該当します。
マスタで MySQL 4.1
が作動している場合、スレーブで作動している
MySQ
Lバージョンに関係なく、常に同一のグローバルキャラクタ
セットとコレーション (照合順序)
をマスタとスレーブに使用します。(これらは、--character-set-server
および --collation-server
オプションがコントロールします。)これ以外の場合は、マスタのキャラクタ
セットのユニーク
キーが、スレーブのキャラクタ
セットではユニークではないと認識する可能性があるため、スレーブで重複キー
エラーが発生することがあります。ノート:
マスタとスレーブの両方が MySQL 5.0
以降のバージョンである場合は、この心配は不要です。
MySQL 4.1.3
より古いバージョンのマスタでは、クライアントのキャラクタ
セットのグローバル値が異なると、スレーブではそのキャラクタ
セットの変更を認識しません。そのため、SET
NAMES
や SET CHARACTER SET
などをクライアントに使用しないでください。マスタとスレーブの両方が
4.1.3
以降である場合、クライアントはキャラクタ
セット変数のセッション値を自由に設定できます。これは、これらの設定がバイナリ
ログに書き込まれるため、スレーブが認識することに基づきます。つまり、クライアントは
SET NAMES
あるいは SET
CHARACTER SET
を使用でき、collation_client
あるいは collation_server
などで変数設定ができます。しかし、前述のように、クライアントではこれら変数のグローバル値を変更できないため、マスタとスレーブでは常に同一のグローバル
キャラクタ
セット値を使用する必要があります。
character_set_server
のグローバル値とは異なるキャラクタ
セットでマスタのデータベースを使用している場合は、CREATE
TABLE
コマンドを設計する必要があります。その設計で、データベースのテーブルはデータベースのデフォルトのキャラクタ
セットに定義的に依存することがなくなります。推奨の回避方法としては、CREATE
TABLE
構文でキャラクタ
セットとコレーションを定義することをお勧めします。