Читайте символы utf-8 из MySql в переменные C - PullRequest
0 голосов
/ 03 октября 2011

У меня есть база данных 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;
}

1 Ответ

0 голосов
/ 03 октября 2011

Вы получаете данные в ISO-8859-1. MySQL имеет настройки кодирования не только для таблиц базы данных, вы также должны правильно задать кодировку, используемую для клиента MySQL.

Edit:

С mysql_options() документы:

mysql_options () должен вызываться после mysql_init () и перед mysql_connect () или mysql_real_connect ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...