Portál AbcLinuxu, 1. května 2025 15:28
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í set names latin2
, ten dělá totéž. Pro aktuální spojení.
default-character-set=latin2
…
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.