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での対処はよろしくないらしい・・・。
参考サイト
コメントを残す