1 This is damn ugly patch if you need to update it, see PHP_5_2 branch version to
2 understand what this patch is supposed to do as in 5.3 the ini section is
3 enabled only if mysqlnd driver is enabled which makes the contexts really
6 diff -urNp -x '*.orig' php-5.6.40.org/ext/pdo_mysql/mysql_driver.c php-5.6.40/ext/pdo_mysql/mysql_driver.c
7 --- php-5.6.40.org/ext/pdo_mysql/mysql_driver.c 2019-01-09 10:54:13.000000000 +0100
8 +++ php-5.6.40/ext/pdo_mysql/mysql_driver.c 2021-08-23 23:19:43.115775250 +0200
9 @@ -539,6 +539,7 @@ static int pdo_mysql_handle_factory(pdo_
10 pdo_mysql_db_handle *H;
12 char *host = NULL, *unix_socket = NULL;
13 + char *connect_charset = NULL;
14 unsigned int port = 3306;
16 struct pdo_data_src_parser vars[] = {
17 @@ -764,6 +765,12 @@ static int pdo_mysql_handle_factory(pdo_
18 password_len = strlen(dbh->password);
21 + connect_charset = PDO_MYSQL_G(connect_charset);
23 + if (connect_charset != NULL) {
24 + mysql_options(H->server, MYSQL_SET_CHARSET_NAME, connect_charset);
27 if (mysqlnd_connect(H->server, host, dbh->username, dbh->password, password_len, dbname, dbname_len,
28 port, unix_socket, connect_opts, MYSQLND_CLIENT_NO_FLAG TSRMLS_CC) == NULL) {
30 diff -urNp -x '*.orig' php-5.6.40.org/ext/pdo_mysql/pdo_mysql.c php-5.6.40/ext/pdo_mysql/pdo_mysql.c
31 --- php-5.6.40.org/ext/pdo_mysql/pdo_mysql.c 2019-01-09 10:54:13.000000000 +0100
32 +++ php-5.6.40/ext/pdo_mysql/pdo_mysql.c 2021-08-23 23:19:43.115775250 +0200
33 @@ -95,6 +95,7 @@ PHP_INI_BEGIN()
35 STD_PHP_INI_ENTRY("pdo_mysql.debug", NULL, PHP_INI_SYSTEM, OnUpdateString, debug, zend_pdo_mysql_globals, pdo_mysql_globals)
37 + STD_PHP_INI_ENTRY("pdo_mysql.connect_charset", NULL, PHP_INI_ALL, OnUpdateString, connect_charset, zend_pdo_mysql_globals, pdo_mysql_globals)
41 @@ -141,9 +142,7 @@ static PHP_MINIT_FUNCTION(pdo_mysql)
42 static PHP_MSHUTDOWN_FUNCTION(pdo_mysql)
44 php_pdo_unregister_driver(&pdo_mysql_driver);
46 UNREGISTER_INI_ENTRIES();
51 @@ -213,6 +212,7 @@ static PHP_GINIT_FUNCTION(pdo_mysql)
52 pdo_mysql_globals->debug = NULL; /* The actual string */
53 pdo_mysql_globals->dbg = NULL; /* The DBG object*/
55 + pdo_mysql_globals->connect_charset = NULL;
59 diff -urNp -x '*.orig' php-5.6.40.org/ext/pdo_mysql/php_pdo_mysql_int.h php-5.6.40/ext/pdo_mysql/php_pdo_mysql_int.h
60 --- php-5.6.40.org/ext/pdo_mysql/php_pdo_mysql_int.h 2019-01-09 10:54:13.000000000 +0100
61 +++ php-5.6.40/ext/pdo_mysql/php_pdo_mysql_int.h 2021-08-23 23:19:43.115775250 +0200
62 @@ -72,6 +72,7 @@ ZEND_BEGIN_MODULE_GLOBALS(pdo_mysql)
63 char *debug; /* The actual string */
64 MYSQLND_DEBUG *dbg; /* The DBG object */
66 + char *connect_charset;
67 #if defined(PHP_WIN32) && !PDO_DBG_ENABLED
68 /* dummy member so we get at least one member in the struct
69 * and avoids build errors.