5.3. Niewłaściwe porównywanie znaków diakrytycznych w bazie MySQL

W przypadku instalacji systemu dLibra na bazie danych MySQL pojawia się problem dotyczący dodawania nowych wartości do opisu obiektów cyfrowych i poprawiania wartości już w opisie istniejących. Problem ten pojawia się, gdy próbujemy zmienić wartość bez znaków diakrytycznych na wartość takie znaki posiadającą np. "skora" na "skóra" lub gdy próbujemy dodać nową wartość, która różni się od innej wartości istniejącej już w systemie tylko znakami diakrytycznymi. Wyświetlany jest wówczas komunikat o błędzie, iż dodawana/zmieniona wartość już istnieje. Problem ten może dotyczyć również sytuacji, w której różnica sprowadza się tylko do wielkości liter (np. Koło i koło).

Błąd ten związany jest ze sposobem porównywania znaków przez bazę danych MySQL. Dla kodowania UTF-8, w którym znaki powinny być przechowywane w bazie danych, domyślnym sposobem porównywania znaków jest utf8_general_ci, który znaki diakrytyczne jak np. ä, ó traktuje tak samo jak odpowiednio a, o. Dlatego podczas sprawdzania, czy w bazie danych istnieje nowa wartość "skóra" zostaje znaleziona wartość "skora".

Rozwiązaniem tego problemu jest zmiana domyślnego sposobu porównywania znaków na binarny o nazwie utf8_bin. Można tego dokonać na poziomie całej bazy danych, tabeli czy nawet pojedynczej kolumny. Szczegółowe informacje na ten temat znajdują się na stronie Specifying Character Sets and Collations instrukcji bazy danych MySQL.

W przypadku opisanego powyżej problemu podstawowym rozwiązaniem jest zmiana sposobu porównywania znaków dla tabeli MET_ATTRIBUTE_VALUES. Polecenie zmiany sposobu porównywania powinno wyglądać następująco:

					ALTER TABLE nazwa_tabeli CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
				
[Caution]Uwaga!

W przypadku przeprowadzania opisanej powyżej operacji na bazie danych już po instalacji, zaleca się wcześniejsze wykonanie backup-u bazy danych.