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