Hello!
Please consider applying this patch.
The main reason is that we must call
mysql_options(MYSQL_SET_CHARSET_NAME) right before calling
mysql_real_connect().
It allows the following:
soci::session db( soci::mysql, "user=billing password=billing
dbname=billing charset=utf8" );
--
Best regards, Michael Evdokimov
Network Solutions, Moscow, Russia, Office: +7-495-7950677, Mobile:
+7-963-6054013
Web: www.lanbilling.ru, www.lanbilling.tv, www.helpdesk2.ru
diff --git a/src/backends/mysql/session.cpp b/src/backends/mysql/session.cpp
index c469469..1535483 100644
--- a/src/backends/mysql/session.cpp
+++ b/src/backends/mysql/session.cpp
@@ -154,7 +154,7 @@ void parse_connect_string(const string & connectString,
string *db, bool *db_p,
string *unix_socket, bool *unix_socket_p,
int *port, bool *port_p, string *ssl_ca, bool *ssl_ca_p,
- string *ssl_cert, bool *ssl_cert_p, string *ssl_key, bool *ssl_key_p)
+ string *ssl_cert, bool *ssl_cert_p, string *ssl_key, bool *ssl_key_p,
string* charset)
{
*host_p = false;
*user_p = false;
@@ -240,6 +240,10 @@ void parse_connect_string(const string & connectString,
*ssl_key = val;
*ssl_key_p = true;
}
+ else if( par == "charset" )
+ {
+ *charset = val;
+ }
else
{
throw soci_error(err);
@@ -252,17 +256,22 @@ void parse_connect_string(const string & connectString,
mysql_session_backend::mysql_session_backend(
std::string const & connectString)
{
- string host, user, password, db, unix_socket, ssl_ca, ssl_cert, ssl_key;
+ string host, user, password, db, unix_socket, ssl_ca, ssl_cert, ssl_key,
charset;
int port;
bool host_p, user_p, password_p, db_p, unix_socket_p, port_p, ssl_ca_p,
ssl_cert_p, ssl_key_p;
parse_connect_string(connectString, &host, &host_p, &user, &user_p,
&password, &password_p, &db, &db_p,
- &unix_socket, &unix_socket_p, &port, &port_p, &ssl_ca, &ssl_ca_p,
&ssl_cert, &ssl_cert_p, &ssl_key, &ssl_key_p);
+ &unix_socket, &unix_socket_p, &port, &port_p, &ssl_ca, &ssl_ca_p,
&ssl_cert, &ssl_cert_p, &ssl_key, &ssl_key_p, &charset);
conn_ = mysql_init(NULL);
if (conn_ == NULL)
{
throw soci_error("mysql_init() failed.");
}
+ if (!charset.empty())
+ {
+ if (mysql_options(conn_, MYSQL_SET_CHARSET_NAME, charset.c_str()) != 0)
+ throw soci_error("mysql_options(MYSQL_SET_CHARSET_NAME) failed.");
+ }
if(ssl_ca_p)
{
mysql_ssl_set(conn_, ssl_key_p ? ssl_key.c_str() : NULL, ssl_cert_p ?
ssl_cert.c_str() : NULL, ssl_ca_p ? ssl_ca.c_str() : NULL, 0, 0);
------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
soci-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/soci-users