Hello internals,
Attached is a patch against PHP_4_4 allowing to specify a charset when
talking to MySQL using ext/mysql and client libraries that come with
MySQL >= 4.1.13 (the default being utf8).
This was mainly tested with latin1. To test, add an ini entry like this:
mysql.default_charset = "latin1"
Any constructive comments on the patch would be appreciated.
Sincerely,
Olivier
diff -u ext/mysql/php_mysql.c ext/mysql/php_mysql.c
--- ext/mysql/php_mysql.c 2006-07-06 11:18:48.000000000 -0400
+++ ext/mysql/php_mysql.c 2006-07-06 10:48:45.000000000 -0400
@@ -354,6 +354,9 @@
STD_PHP_INI_ENTRY("mysql.default_socket", NULL,
PHP_INI_ALL, OnUpdateStringUnempty, default_socket,
zend_mysql_globals, mysql_globals)
STD_PHP_INI_ENTRY("mysql.connect_timeout", "60",
PHP_INI_ALL, OnUpdateInt, connect_timeout,
zend_mysql_globals, mysql_globals)
STD_PHP_INI_BOOLEAN("mysql.trace_mode", "0",
PHP_INI_ALL, OnUpdateInt, trace_mode,
zend_mysql_globals, mysql_globals)
+#if MYSQL_VERSION_ID >= 40113
+ STD_PHP_INI_ENTRY("mysql.default_charset", NULL,
PHP_INI_ALL, OnUpdateStringUnempty,
default_charset,zend_mysql_globals, mysql_globals)
+#endif
PHP_INI_END()
/* }}} */
@@ -371,6 +374,9 @@
mysql_globals->connect_timeout = 0;
mysql_globals->trace_mode = 0;
mysql_globals->result_allocated = 0;
+#if MYSQL_VERSION_ID >= 40113
+ mysql_globals->default_charset = NULL;
+#endif
}
/* }}} */
@@ -733,6 +739,10 @@
mysql = (php_mysql_conn *) le->ptr;
}
+#if MYSQL_VERSION_ID >= 40113
+ if (MySG(default_charset) != NULL)
+ mysql_set_character_set(&mysql->conn,
MySG(default_charset));
+#endif
ZEND_REGISTER_RESOURCE(return_value, mysql, le_plink);
} else { /* non persistent */
list_entry *index_ptr, new_index_ptr;
@@ -795,6 +805,10 @@
}
/* add it to the list */
+#if MYSQL_VERSION_ID >= 40113
+ if (MySG(default_charset) != NULL)
+ mysql_set_character_set(&mysql->conn,
MySG(default_charset));
+#endif
ZEND_REGISTER_RESOURCE(return_value, mysql, le_link);
/* add it to the hash */
diff -u ext/mysql/php_mysql.h ext/mysql/php_mysql.h
--- ext/mysql/php_mysql.h 2006-07-06 11:18:48.000000000 -0400
+++ ext/mysql/php_mysql.h 2006-07-06 10:11:28.000000000 -0400
@@ -105,6 +105,9 @@
long connect_timeout;
long result_allocated;
long trace_mode;
+#if MYSQL_VERSION_ID >= 40113
+ char *default_charset;
+#endif
ZEND_END_MODULE_GLOBALS(mysql)
#ifdef ZTS
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php