У меня есть база данных mysql с двумя полями (имя, фамилия) типа CHAR (255) и набор символов utf_general_ci
Используя mysqlphpadmin, я установил firstname на «Sàm» и фамилию на «Èkméïß»
В моем коде c я получаю эти поля, используя:
sscanf(row[SDB_INV_COL_FIRSTNAME],"%[^\n]",db_firstname);
sscanf(row[SDB_INV_COL_LASTNAME],"%[^\n]",db_lastname);
Но когда я это делаю, переменная db_firstname устанавливается на 'S \ 340m'
и db_lastname имеет значение '\ 310km \ 351 \ 357 \ 227'
Кажется, что символы переключаются на Unicode или другой набор символов, и я не могу понять, как это исправить! Как вывести мои поля как utf8 в мои переменные C?
Мое соединение настроено так (обратите внимание на настройку кодировки):
conn = mysql_init(NULL);
if(conn == NULL) {
sprintf(tempstr,"Survey database connection init error: [%u] %s", mysql_errno(conn), mysql_error(conn));
logmessage(LLEVEL_ERROR, INTERROR_MYSQLCONNECT_FAILED, tempstr);
sdberrorstate = TRUE;
return FALSE;
}
if(!mysql_real_connect(conn, program_options.sdbhost , program_options.sdbusername , program_options.sdbpassword, program_options.sdbdatabase, program_options.sdbport, NULL, 0)) {
sprintf(tempstr,"Survey database real connection error [%u] [%s]", mysql_errno(conn), mysql_error(conn));
logmessage(LLEVEL_ERROR, INTERROR_MYSQLCONNECT_FAILED, tempstr);
sdberrorstate = TRUE;
return FALSE;
}
if(mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8") != 0) {
sprintf(tempstr,"Survey database set characterset utf8 error [%u] [%s]", mysql_errno(conn), mysql_error(conn));
logmessage(LLEVEL_ERROR, INTERROR_MYSQLCONNECT_FAILED, tempstr);
sdberrorstate = TRUE;
return FALSE;
}