diff -urNp -x '*.orig' php-5.5.38.org/ext/mysql/php_mysql.c php-5.5.38/ext/mysql/php_mysql.c --- php-5.5.38.org/ext/mysql/php_mysql.c 2016-07-20 10:41:48.000000000 +0200 +++ php-5.5.38/ext/mysql/php_mysql.c 2021-08-23 23:02:58.883278756 +0200 @@ -506,6 +506,7 @@ PHP_INI_BEGIN() STD_PHP_INI_ENTRY("mysql.default_socket", NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_socket, zend_mysql_globals, mysql_globals) #endif STD_PHP_INI_ENTRY("mysql.connect_timeout", "60", PHP_INI_ALL, OnUpdateLong, connect_timeout, zend_mysql_globals, mysql_globals) + STD_PHP_INI_ENTRY("mysql.connect_charset", NULL, PHP_INI_ALL, OnUpdateString, connect_charset, zend_mysql_globals, mysql_globals) STD_PHP_INI_BOOLEAN("mysql.trace_mode", "0", PHP_INI_ALL, OnUpdateLong, trace_mode, zend_mysql_globals, mysql_globals) STD_PHP_INI_BOOLEAN("mysql.allow_local_infile", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_local_infile, zend_mysql_globals, mysql_globals) PHP_INI_END() @@ -523,6 +524,7 @@ static PHP_GINIT_FUNCTION(mysql) mysql_globals->connect_errno = 0; mysql_globals->connect_error = NULL; mysql_globals->connect_timeout = 0; + mysql_globals->connect_charset = NULL; mysql_globals->trace_mode = 0; mysql_globals->allow_local_infile = 1; mysql_globals->result_allocated = 0; @@ -721,6 +723,7 @@ static void php_mysql_do_connect(INTERNA { char *user=NULL, *passwd=NULL, *host_and_port=NULL, *socket=NULL, *tmp=NULL, *host=NULL; int user_len = 0, passwd_len = 0, host_len = 0; + char *connect_charset=NULL; char *hashed_details=NULL; int hashed_details_length, port = MYSQL_PORT; long client_flags = 0; @@ -744,6 +747,7 @@ static void php_mysql_do_connect(INTERNA #endif connect_timeout = MySG(connect_timeout); + connect_charset = MySG(connect_charset); socket = MySG(default_socket); @@ -883,6 +887,10 @@ static void php_mysql_do_connect(INTERNA if (connect_timeout != -1) { mysql_options(mysql->conn, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout); } + + if (connect_charset != NULL) + mysql_options(mysql->conn, MYSQL_SET_CHARSET_NAME, connect_charset); + #ifndef MYSQL_USE_MYSQLND if (mysql_real_connect(mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL) #else @@ -931,6 +939,8 @@ static void php_mysql_do_connect(INTERNA #endif if (mysql_ping(mysql->conn)) { if (mysql_errno(mysql->conn) == 2006) { + if (connect_charset != NULL) + mysql_options(mysql->conn, MYSQL_SET_CHARSET_NAME, connect_charset); #ifndef MYSQL_USE_MYSQLND if (mysql_real_connect(mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL) #else @@ -1010,6 +1020,9 @@ static void php_mysql_do_connect(INTERNA mysql_options(mysql->conn, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout); } + if (connect_charset != NULL) + mysql_options(mysql->conn, MYSQL_SET_CHARSET_NAME, connect_charset); + #ifndef MYSQL_USE_MYSQLND if (mysql_real_connect(mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL) #else diff -urNp -x '*.orig' php-5.5.38.org/ext/mysql/php_mysql_structs.h php-5.5.38/ext/mysql/php_mysql_structs.h --- php-5.5.38.org/ext/mysql/php_mysql_structs.h 2016-07-20 10:41:48.000000000 +0200 +++ php-5.5.38/ext/mysql/php_mysql_structs.h 2021-08-23 23:02:58.883278756 +0200 @@ -118,6 +118,7 @@ ZEND_BEGIN_MODULE_GLOBALS(mysql) long default_port; char *default_host, *default_user, *default_password; char *default_socket; + char *connect_charset; char *connect_error; long connect_errno; long connect_timeout;