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

Reply via email to