From 177fe25008a8b616cc9c7bbda5ee507dc5d660ee Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 27 Apr 2015 12:38:40 +0200 Subject: [PATCH] Bug 13810: Change collate for tagsubfield (utf8_bin) Before bug 11944, the marc_subfield_structure.tagsubfield column had a specific collate: utf8_bin. It has been introduced by commit 67e20d82ffdfcd69344ec30696bebc51c00d863c Date: Sun Jun 22 16:35:48 2008 -0500 DB Bump 094 - bug 2268 -- allow mixed case subfield labels in MARC21 by changing db column collation. This change should be kept and Koha should continue to allow and create subfields with the same letter but different case sensitivity. What does this patch: 1/ To prevent the updatedatabase entry 3.19.00.006 to fail if subfields with different case sensitivity already exist in the DB, the table is managed separately from others. 2/ To update DB which have already pass this dbrev, a new entry will be create to update the specific collate for this column. Test plan: 1/ a. With a 3.18 DB, create subfield 'a' and 'A' for the same field b. Execute the updatedatabase.pl script. 3.19.00.006 should not fail anymore 2/ a. With a master DB (3.19.00.006 has already been executed), create subfields 'a' and 'A'. You should get an error. b. Apply this patch, execute the DB entry and try again 2/a. you should be able to create the second subfield. --- installer/data/mysql/updatedatabase.pl | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index f3fd794..3ef440e 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -9711,7 +9711,25 @@ if ( CheckVersion($DBversion) ) { $table_sth->execute; my @table = $table_sth->fetchrow_array; unless ( $table[1] =~ /COLLATE=utf8mb4_unicode_ci/ ) { #catches utf8mb4 collated tables - $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci|); + if ( $name eq 'marc_subfield_structure' ) { + $dbh->do(q| + ALTER TABLE marc_subfield_structure + MODIFY COLUMN tagfield varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + MODIFY COLUMN tagsubfield varchar(1) COLLATE utf8_bin NOT NULL DEFAULT '', + MODIFY COLUMN liblibrarian varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + MODIFY COLUMN libopac varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + MODIFY COLUMN kohafield varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL, + MODIFY COLUMN authorised_value varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + MODIFY COLUMN authtypecode varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, + MODIFY COLUMN value_builder varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL, + MODIFY COLUMN frameworkcode varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + MODIFY COLUMN seealso varchar(1100) COLLATE utf8_unicode_ci DEFAULT NULL, + MODIFY COLUMN link varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL + |); + } + else { + $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci|); + } } } $dbh->do(q|SET foreign_key_checks = 1|);; -- 2.1.0