从MySQL获取UTF-8数据到Linux C++应用程序

mic*_*ael 2 c++ mysql linux utf-8

显示从MySQL检索到基于Linux的C++应用程序的UTF-8数据,我遇到了很大的麻烦.UTF文本显示为问号.

该应用程序使用MySQL C API.所以我在mysql_init()之前和之后通过了UTF-8选项mysql_real_connect():

mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, 'utf8');
Run Code Online (Sandbox Code Playgroud)

mysql_options(&mysql,MYSQL_INIT_COMMAND, 'SET NAMES utf8');
Run Code Online (Sandbox Code Playgroud)

但没有运气.测试仍显示为问号.我用Perl脚本做了一些测试(我对它更熟悉;)).如果我为连接指定了UTF-8选项,则文本会正确显示:

$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
Run Code Online (Sandbox Code Playgroud)

知道如何在C++应用程序中正确显示UTF-8数据吗?

fek*_*lee 6

这可能是一个简单的错字.你写:

mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, 'utf8');
Run Code Online (Sandbox Code Playgroud)

单引号用于指定字符文字,而不是字符串.所以,改为:

mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");
Run Code Online (Sandbox Code Playgroud)

另外,检查类型mysql.如果是MYSQL *,那么写:

mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "utf8");
Run Code Online (Sandbox Code Playgroud)

这同样适用于该行MYSQL_INIT_COMMAND.