Portál AbcLinuxu, 30. října 2025 10:15
MySQL se pokoušíš porovnat UTF-8 a Latin2 stringy. Jestli se nepletu, tak databáze Abíčka je v Latin2, ale v parametrech JDBC spojení je useUnicode=true, takže tam se řetězec pravděpodobně předává v UTF-8.
Problém bude zřejmě v tom, na jakém charset se server s JDBC ovladačem "dohodnou" - asi to není Latin2, ale UTF-8. Možná by pomohlo jako parametr JDBC URL nastavit characterEncoding=ISO8859_2.
jdbc:mysql://…/devel?characterEncoding=ISO8859_2&mysqlEncoding=latin2
SHOW VARIABLES; | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin2 | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | latin1_swedish_ci | | collation_database | latin2_bin | | collation_server | utf8_general_ci | SHOW CHARACTER SET;
Je třeba dát MySQL na vědomí, aby s vámi komunikovala v daném kódování. To vůbec nesouvisí s tím, v jakém kódování jsou data v databázi uložena. Asi nejsnazší je do /etc/mysql/my.cnf přidat něco jako
[client] default-character-encoding=latin2Jeden drobný háček zrovna tohoto řešení je: všechny klientské programy MySQL by měly načítat konfiguraci ze sekce
client (kromě toho samozřejmě i ze sekce určené jenom pro ně, třeba pro řádkového klienta mysql je to sekce mysql) a když najdou volbu, kterou neznají, považovat to za chybu. A takový mysqlbinlog si zrovna s default-character-encoding neporadí
Více třeba na http://dev.mysql.com/doc/refman/4.1/en/charset-connection.html.
set names latin2, ten dělá totéž. Pro aktuální spojení.
default-character-set=latin2…
Převod dat v MySQL je jen o exportu, přenastavení kódování v databázi a importu zpět. A to jak tabulky, tak data &bdash; vymažeš celou DB, nastavíš ji na UTF8 a při importu tohle nastavení všecko zdědí. Ve zbytku už by to neměl být problém. Ještě to chce vyházet veškeré zmínky o kódování v CREATE dotazech.
)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.