【发布时间】:2011-10-03 18:32:12
【问题描述】:
我有一个 mysql 数据库,有 CHAR(255) 类型的两个字段(名字、姓氏)和字符集 utf_general_ci
使用 mysqlphpadmin 我将名字设置为“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;
}
【问题讨论】:
-
这些是八进制转义序列,代表原始字符仅供参考。
-
如何设置与 MySQL 的连接?
-
我修改了上面的帖子以显示我的连接设置。我将字符集设置为 utf8,虽然我可以做到这一点......但没有区别
-
您应该在连接前设置选项。
-
我发布了一个“set names utf8”并将 CLIENT 设置为 utf8,字符串开始按预期出现!谢谢