From e0ce6bd9b3198aeb9fbd058171b6221b0fae8572 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Mon, 19 Jan 2015 13:48:42 +0000 Subject: [PATCH] BUG 13596: Prevent utf8mb4 -> utf8 convertion utf8mb4 is a superset of utf8 and thus is compatible. We should not force an entire db change upon people who have proactively set utf8mb4 encoding before now. This patch aslo removed the deprecated use of ->tables stanza in favour of the table_info stanze. --- installer/data/mysql/updatedatabase.pl | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 4653c02..b7f7637 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -9658,10 +9658,16 @@ if(CheckVersion($DBversion)) { $DBversion = "3.19.00.006"; if ( CheckVersion($DBversion) ) { - $dbh->do(q|SET foreign_key_checks = 0|);; - my @tables = $dbh->tables(); - for my $table ( @tables ) { - $dbh->do(qq|ALTER TABLE $table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci|); + $dbh->do(q|SET foreign_key_checks = 0|); + my $sth = $dbh->table_info( '','','','TABLE' ); + my ( $cat, $schema, $name, $type, $remarks ); + while ( ( $cat, $schema, $name, $type, $remarks ) = $sth->fetchrow_array ) { + my $table_sth = $dbh->prepare(qq|SHOW CREATE TABLE $name|); + $table_sth->execute; + my @table = $table_sth->fetchrow_array; + unless ( $table[1] =~ /COLLATE=utf8/ ) { #catches utf8 and utf8mb4 tables + $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci|); + } } $dbh->do(q|SET foreign_key_checks = 1|);; -- 1.7.10.4