Use the backend server charset
The default character set should be copied from the server so that MaxScale appears to be the same. This fixes problems where utf8mb4 couldn't be taken into use because MaxScale would always send latin1 as the server charset.
This commit is contained in:
@ -2612,6 +2612,11 @@ static bool check_server_permissions(SERVICE *service, SERVER* server,
|
||||
return my_errno != ER_ACCESS_DENIED_ERROR;
|
||||
}
|
||||
|
||||
/** Copy the server charset */
|
||||
MY_CHARSET_INFO cs_info;
|
||||
mysql_get_character_set_info(mysql, &cs_info);
|
||||
server->charset = cs_info.number;
|
||||
|
||||
if (server->server_string == NULL)
|
||||
{
|
||||
const char *server_string = mysql_get_server_info(mysql);
|
||||
|
@ -44,6 +44,9 @@
|
||||
#include <log_manager.h>
|
||||
#include <gw_ssl.h>
|
||||
|
||||
/** The latin1 charset */
|
||||
#define SERVER_DEFAULT_CHARSET 0x08
|
||||
|
||||
static SPINLOCK server_spin = SPINLOCK_INIT;
|
||||
static SERVER *allServers = NULL;
|
||||
|
||||
@ -89,6 +92,7 @@ server_alloc(char *servname, char *protocol, unsigned short port)
|
||||
server->persistmaxtime = 0;
|
||||
server->persistpoolmax = 0;
|
||||
server->slave_configured = false;
|
||||
server->charset = SERVER_DEFAULT_CHARSET;
|
||||
spinlock_init(&server->persistlock);
|
||||
|
||||
spinlock_acquire(&server_spin);
|
||||
|
@ -109,6 +109,7 @@ typedef struct server
|
||||
long persistpoolmax; /**< Maximum size of persistent connections pool */
|
||||
long persistmaxtime; /**< Maximum number of seconds connection can live */
|
||||
int persistmax; /**< Maximum pool size actually achieved since startup */
|
||||
uint8_t charset; /**< Default server character set */
|
||||
#if defined(SS_DEBUG)
|
||||
skygw_chk_t server_chk_tail;
|
||||
#endif
|
||||
|
@ -277,6 +277,11 @@ int MySQLSendHandshake(DCB* dcb)
|
||||
int len_version_string = 0;
|
||||
int id_num;
|
||||
|
||||
if (dcb->service->dbref)
|
||||
{
|
||||
mysql_server_language = dcb->service->dbref->server->charset;
|
||||
}
|
||||
|
||||
MySQLProtocol *protocol = DCB_PROTOCOL(dcb, MySQLProtocol);
|
||||
GWBUF *buf;
|
||||
|
||||
|
Reference in New Issue
Block a user