Bug 11906: ensure that Koha::Database uses UTF8 mode when connecting to databases
authorGalen Charlton <gmc@esilibrary.com>
Wed, 26 Mar 2014 20:38:32 +0000 (20:38 +0000)
committerGalen Charlton <gmc@esilibrary.com>
Thu, 27 Mar 2014 14:44:48 +0000 (14:44 +0000)
This patch fixes an issue whereby the DBIx::Class schema objects
were not connecting to the underlying database in UTF8 mode.  This
most visibility manifested as patron list pages not displaying
diacritics correctly.

To test:

[1] Create a patron list, and make sure that it contains at least
    one patron whose name or patron category description contains
    a non-ASCII character.
[2] View the list contents; the diacritics should appear mangled.
[3] Apply the patch.
[4] View the patron list again.  This time, the diacritics should
    be displayed correctly.  Note that Apache will also log
    "list.pl: Wide character in print ...", but this is the lesser
    of two evils.
[5] Verify that prove -v t/db_dependent/Koha_Database.t passes.
[6] (extra credit) Verify that  t/db_dependent/Koha_Database.t
    passes when connect to a PostgreSQL database.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Koha/Database.pm

index 12758bf..b259ca0 100644 (file)
@@ -53,9 +53,13 @@ sub _new_schema {
     my $db_port   = $context->config("port") || '';
     my $db_user   = $context->config("user");
     my $db_passwd = $context->config("pass");
+
+    my $db_opts = ($db_driver eq 'mysql') ? { mysql_enable_utf8 => 1 } :
+                  ($db_driver eq 'Pg')    ? { pg_enable_utf8    => 1 } :
+                                            { };
     my $schema    = Koha::Schema->connect(
         "DBI:$db_driver:dbname=$db_name;host=$db_host;port=$db_port",
-        $db_user, $db_passwd );
+        $db_user, $db_passwd, $db_opts );
     return $schema;
 }