Illegal mix of collationsへの対処法

Illegal mix of collations
が意味することは「mysqlクライアントとmysqlサーバの文字コードが違いますよん」ということ。
クライアントライブラリのmake時とサーバライブラリのmake時に指定した文字コードが違ったりすると発生する。
で、対処法はmysql_init()とmysql_real_connect()の間にmysql_options()を実行するか、
mysql_real_connect()の直後に、mysql_set_character_set()を実行するかのどちらか。
mysql_set_character_set()の場合のサンプルは以下。

MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
    fprintf(stderr, "Failed to connect to database: Error: %sn",
          mysql_error(&mysql));
}
if (!mysql_set_character_set(&mysql, "utf8"))
{
    printf("New client character set: %sn",
           mysql_character_set_name(&mysql));
}

ちなみに、my.cnfに

[mysqld]
init-connect=SET NAMES utf8

という対処でもOKと書いてあるところもあって試してみたのですが、エラーは消えず。
下の参考サイトによるとSET NAMESでの対処はよろしくないらしい・・・。
参考サイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です