Popravak kvačica u MySQL-u i phpMyAdminu

phpMyAdmin, vaš SQL dump ili aplikacija prikazuju ÄŤ ili ć umjesto č i ć? Obično se kodiranje tablice, veze i uvoza ne podudara. Mojibuster popravlja izvoze izravno u pregledniku – a zatim MySQL trajno postavite ispravno.

Radi s tekstom i datotekama:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Na primjer izvozi iz Excela, ispisi baza podataka, titlovi za filmove ili kod web-stranica.

Popravi

  1. Povucite datoteku ili zalijepite tekst
  2. Popravak se odvija automatski
  3. Kopirajte ili preuzmite
ili jednostavno povucite datoteku ovamo

Tri mjesta na kojima MySQL traži kodiranje

  • Stupac ili tablica: skup znakova u kojem se podaci spremaju, npr. utf8mb4 ili latin1.
  • Veza: skup znakova u kojem klijent i poslužitelj komuniciraju – postavlja se s SET NAMES utf8mb4 ili u postavkama veze.
  • Datoteka: kodiranje kojim se čita uvoz ili piše izvoz – u phpMyAdminu u polju Character set of the file (skup znakova datoteke).

Ako se ta tri ne podudaraju, znakovi se pokvare. Najčešći slučaj: UTF-8 tekst je preko latin1 veze zapisan u latin1 stupac. U aplikaciji sve izgleda dobro, ali phpMyAdmin i izvoz prikazuju ÄŤ, š i slične pogreške.

Redak iz phpMyAdmin CSV izvoza

Prije

"1","Željko Čačić","Ulica kneza Branimira 12","Osijek"

Poslije

"1","Željko Čačić","Ulica kneza Branimira 12","Osijek"

Provjera skupova znakova

  • SHOW VARIABLES LIKE 'character_set%'; prikazuje postavke poslužitelja i veze.
  • SHOW CREATE TABLE kupci; prikazuje skup znakova tablice i njezinih stupaca.
  • SELECT ime, HEX(ime) FROM kupci LIMIT 5; prikazuje stvarne bajtove: u stupcu utf8mb4 C48D je ispravan č, a dulji niz poput C384C5A4 već je pokvaren ÄŤ.

Popravak izvoza ili dumpa

  1. Izvezite tablicu u phpMyAdminu kao SQL ili CSV – ili naredbom mysqldump --default-character-set=utf8mb4.
  2. Povucite datoteku u polje iznad. Mojibuster popravlja samo pokvarena mjesta, ispravni znakovi ostaju nepromijenjeni.
  3. Provjerite popravljena mjesta pod Što je promijenjeno? i preuzmite datoteku.
  4. Uvezite je u tablicu s utf8mb4 i u dijalogu za uvoz odaberite skup znakova utf-8.
  5. Prvo isprobajte na kopiji prije nego zamijenite pravu tablicu.

Izvoz nikada ne napušta vaše računalo – što je važno kod podataka o kupcima. Ako imate datoteku u Windows-1250, pomoći će stranica pretvorba Windows-1250 u UTF-8.

Uklonite uzrok

  • Nove tablice stvarajte s DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_croatian_ci – to daje i hrvatski redoslijed abecede (č, ć, dž, đ, š, ž).
  • Postavite vezu aplikacije na utf8mb4, u PHP-u npr. s charset=utf8mb4 u PDO DSN-u.
  • Ako su UTF-8 bajtovi u latin1 stupcu, ne pretvarajte ga izravno s CONVERT TO – to ih kodira drugi put i nastaje dvostruko kodiran tekst. Siguran put vodi preko binarnog tipa: prvo MODIFY ime VARBINARY(255), zatim MODIFY ime VARCHAR(255) CHARACTER SET utf8mb4. Pojavu opisuje stranica što je mojibake.
  • Ako MySQL znakove zamjenjuje s ?, stupac ili veza ih ne mogu prikazati. Ono što je već tako spremljeno izgubljeno je.

Česta pitanja

Zašto se u mojoj aplikaciji sve vidi dobro, a u phpMyAdminu ne?

Zato što aplikacija i baza dvaput čine istu pogrešku: aplikacija piše UTF-8 preko latin1 veze i na isti način ga čita natrag. phpMyAdmin se ispravno povezuje pa prikazuje ono što je zaista spremljeno.

Koji collation trebam koristiti?

Za hrvatske tekstove najbolji je utf8mb4_croatian_ci jer sortira prema hrvatskoj abecedi. Za opću upotrebu dovoljan je i utf8mb4_unicode_ci. Važniji je skup znakova utf8mb4 – ne utf8, koji u MySQL-u ne može spremiti emotikone.

Radi li to i s MariaDB-om?

Da. MariaDB s skupovima znakova postupa kao MySQL, a naredbe su iste.

Koliko dump smije biti velik?

Do 100 MB po datoteci. Veće baze izvezite tablicu po tablicu.

Više uputa