[asterisk-dev] [Code Review] Correct character encoding for MySQL connections in Realtime w/ MySQL

Erin Spiceland espiceland at digium.com
Mon Oct 4 11:22:55 CDT 2010


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/964/
-----------------------------------------------------------

(Updated 2010-10-04 11:22:55.064099)


Review request for Asterisk Developers.


Changes
-------

I have modified this fix to do nothing unless a charset is specified. If no charset is specified in res_mysql.conf, the connection will be made with all configured charsets and defaults untouched. This will prevent connection failures due to mismatched charsets.


Summary
-------

MySQL connection code used in res_config_mysql did not specify a character set, so data retrieved from the database was encoded incorrectly. I have added an optional configuration value which goes in res_mysql.conf which tells MySQL what character set to use when transmitting the data.  This bug was also present in the MYSQL dialplan application, so I have fixed it there as well.  Connection code both places now sends the specified character set (or "latin1" by default, as MySQL.com says this is the most commonly used character set) during connection and executes "SET NAME charset" immediately after connecting. Executing "SET NAMES charset" is necessary because it sets "character_set_connection" and "collation_connection" to the requested charsets instead of leaving them set to the default for the database which is being used.


Diffs (updated)
-----

  /branches/1.4/apps/app_addon_sql_mysql.c 1132 
  /branches/1.4/configs/res_mysql.conf.sample 1132 
  /branches/1.4/res/res_config_mysql.c 1132 

Diff: https://reviewboard.asterisk.org/r/964/diff


Testing
-------

Tested with 'utf8', 'latin1', and '' specified with utf8 and latin1 data. I also wrote an external test to test the dialplan application. I tested with valid and invalid charset names.  MySQL connection fails when the charset is not valid or is not supported.


Thanks,

Erin




More information about the asterisk-dev mailing list