Fixing broken UTF-8 handling with MySQL driver
Felix Zandanel
felix at zandanel.me
Wed Mar 11 19:31:01 UTC 2015
Hi,
I noticed that dovecot's MySQL driver doesn't play well with UTF-8 encoded strings. I presume this issue has been around for a while. However, it still fails with the current release candidate 2.2.16-rc1.
I have been using the sieve extdata plugin with a MySQL-backed dict to retrieve a folder name that is then passed to fileinto:
fileinto :create "${extdata.folder_name_drafts}";
Whenever this dict returned a string with non-7byte characters, a line such as the following popped up in sieve.log. (This example query should return "Entwürfe".)
error: folder name specified for fileinto command is not utf-8: Entw?rfe.
Although my MySQL installation is set up to use UTF-8 as the default charset on every level (config, database, table and field), and the character_set_* runtime variables all yield the value "utf8", it still seems that the mysql client library must be instructed to actually use UTF-8 explicitly. Adding the following statement to driver_mysql_connect() fixes the issue for me:
mysql_options(db->mysql, MYSQL_SET_CHARSET_NAME, "utf8");
I checked this against mysql 5.5.41.
Regards,
Felix
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mysql_utf8.patch
Type: application/octet-stream
Size: 559 bytes
Desc: not available
URL: <http://dovecot.org/pipermail/dovecot/attachments/20150311/552337e8/attachment.obj>
More information about the dovecot
mailing list