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

Reply via email to