MySQL Forums
Forum List  »  Connector/C++

Problem with string encoding
Posted by: Geert Giezeman
Date: May 07, 2012 03:09AM

When I use connector/C++ to retrieve a string with non-ascii characters, I get wrong results. Using libmysqlclient, I get the expected string.
My client and SQL server both run on the same system (Ubuntu 11.10 with mysql 1.5.62-0 and libmysqlcppconn-dev 1.1.0-3).

The output of the connector program is:
Fétis, François-Joseph
The output of the mysqlclient program is:
Fétis, François-Joseph
(It might be that this forum garbles this output, but the second is correct).

Below are the programs used to generate the output. If someone could point out what I could do to get the right result, I would be grateful.

// cppconntst.cpp
#include "mysql_driver.h"
#include "cppconn/prepared_statement.h"
#include "cppconn/sqlstring.h"
#include <memory>
#include <stdio.h>

using std::unique_ptr;

int main()
{
char pw[31];
FILE *myp = fopen("myp","r");
if (fscanf(myp,"%30s",pw) !=1)
return 1;
fclose(myp);
sql::Driver *driver = get_driver_instance();
unique_ptr<sql::Connection> conn(driver->connect("localhost","geert",pw));
conn->setClientOption("characterSetResults","UTF8");
conn->setSchema("orpheus");
unique_ptr<sql::Statement> stmt(conn->createStatement());
stmt->execute("SET NAMES 'utf8'");
unique_ptr<sql::PreparedStatement> mdata(conn->prepareStatement(
"SELECT Creator FROM ORPtunes WHERE TuneID=? "));
sql::SQLString creator;
mdata->setInt(1, 4644);
unique_ptr<sql::ResultSet> res(mdata->executeQuery());
if (res->next()) {
creator=res->getString(1);
printf("%s\n", creator.c_str());
}
}


// mysqltst.c
#include <mysql.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>

char * get_pw()
{
char pw[31];
FILE *myp = fopen("myp","r");
int success= (fscanf(myp,"%30s",pw) == 1);
fclose(myp);
return success ? strndup(pw,30) : 0;
}

int main(int argc, char **argv)
{
MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;
mysql_init(&mysql);
char *pw=get_pw();
if (mysql_real_connect(&mysql, "localhost", "geert", pw, "orpheus", 0, 0, 0)==0)
printf("Connection not succesful\n");
free(pw);
int status = mysql_query(&mysql,"SELECT creator FROM ORPtunes WHERE TuneID=4644");
if (status != 0) {
printf("Cannot perform query (%d)\n",status);
return 1;
}
result=mysql_store_result(&mysql);
if (result !=0) {
MYSQL_ROW row;
row = mysql_fetch_row(result);
printf("%s\n", row[0]);
mysql_free_result(result);
}
mysql_close(&mysql);
}

Options: ReplyQuote


Subject
Views
Written By
Posted
Problem with string encoding
3894
May 07, 2012 03:09AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.