Problem z kodowaniem utf8mb4_unicode_ci

Problem z kodowaniem utf8mb4_unicode_ci

Napisane przez: Andrzej Syposz ()
Liczba odpowiedzi: 3

Witam.

Od tygodnia dostawałem informacje od kursantów o braku możliwości zapisania dany z testów "błąd zapisu do bazy danych"

W czerwcu była podobna sytuacja z dodawaniem szkoleń (ćwiczeń z quizem lub scormem). Pomogło przejście na nowszą bazę danych i konwersja.

Niewiedzieć czemu sytuacja się powtarza...

Przeglądałem quizy i losowe pytania przypisane do nich z bazy pytań i pojawił się błąd przy punktacji.

Konkretnie chodzi o to, że jest 12 losowych pytań i każde pytanie ma wagę 8p. czyli maksymalnie daje to 96p. tak było ustawione by nie było ułamków. W trakcie szukania przyczyn otwarłem pierwsze z brzegu pytanie wielokrotnego wyboru z ustawioną opcją tylko 1 poprawna odpowiedź, i w punktacji zauważyłem -90% dla błędnych i 100% dla poprawnych. Ponieważ opcji "0" jeszcze nikt nie dodał (jest od -100 do 100 bez zera???) jest za to "żaden" zmieniłem na "żaden" i dałem zapisz - jest OK, wróciłem do  edycji pytania i zastałem ponownie -90% Hmmm.... Spróbowałem zapisać tak jak jest z -90% i tu błąd !

W tej formie możliwe jest ustawienie tylko 10 punktów za zadanie max, i nie 12 tylko 10 pytań po 1p. jednak problem z z -90% pozostaje. Spróbowałem poszperać w bazie i ustawieniach kodowania. Wróciłem do PHP 7.1 i kodowania utf8_unicode_ci w confih.php a nie utf8mb4_unicode_ci i okazało się że jest ok. W pytaniach pozostaje opcja "żaden" a nie zapisane podejścia do testów same się zapisały.

Pisałem w tej sprawie do Nazwy.pl konsultant jednak odpowiedział że nie ma informacji by było coś zmieniane w ustawieniach baz danych.

Może co jest w najnowszej wersji Moodle ?

Pozdrawiam

Andrzej

W odpowiedzi na Andrzej Syposz

Odp: Problem z kodowaniem utf8mb4_unicode_ci

Napisane przez: Jacek Krzymowski ()
Jeśli błąd daje się odtworzyć to najlepiej włączyć tryb deweloperski i pokazywanie błędów (Administracja serwisu / Rozwój / Usuwanie błędów) i zobaczyć jakie zapytanie sql powoduje błąd i jaki jest komunikat wyjaśnienia.
A co do kodowania bazy to może być przyczyną - warto sprawdzić czy wszystkie tabele i kolumny w bazie mają tę samą metodę porównywania napisów. Nie ważny jest rodzaj - ważne, żeby wszędzie było to samo.
W odpowiedzi na Jacek Krzymowski

Odp: Problem z kodowaniem utf8mb4_unicode_ci

Napisane przez: Andrzej Syposz ()
Taki był błąd przy zapisie wyników:

Debug info: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '66667,hidden = '0',locked = '0',locktime = '0',exported = '0',overridden = '0...' at line 1
UPDATE mdlqi_grade_grades SET
itemid = ?,userid = ?,rawgrade = ?,rawgrademax = ?,rawgrademin = ?,rawscaleid = ?,usermodified = ?,finalgrade = ?,hidden = ?,locked = ?,locktime = ?,exported = ?,overridden = ?,excluded = ?,timecreated = ?,timemodified = ?,aggregationstatus = ?,aggregationweight = ? WHERE id=?
[array (
0 => '204',
1 => '3',
2 => NULL,
3 => 100.0,
4 => 0.0,
5 => NULL,
6 => NULL,
7 => 91.666669999999996,
8 => '0',
9 => '0',
10 => '0',
11 => '0',
12 => '0',
13 => '0',
14 => NULL,
15 => 1603314064,
16 => 'unknown',
17 => NULL,
18 => '1116',
)]
Error code: dmlwriteexception
W odpowiedzi na Jacek Krzymowski

Odp: Problem z kodowaniem utf8mb4_unicode_ci

Napisane przez: Andrzej Syposz ()
Co do kodowania utf8mb4_general_ci ostatecznie zostaje, jednak próba zmiany z PHP 7.2 na coś nowszego daje błędy.

Przy 7.2 pytania zostają takie jakie są ustawione z opcją "Żaden"
Po zmianie na PHP 7.3 wzwyż, system po zapisie odpowiedzi błędnych Jako "Żaden" zmienia automatycznie na -90% i Wielka lipa.
Problemem może tu być zaokrąglenie w tabeli mdlqi_grade_grades gdzie w kolumnie finalgrade mamy dla decimal(10,5) zaokrąglenie z lini 7"
7 => 91.666669999999996,
Tyle udało mi się odkopać, może wie ktoś coś więcej?