Hirdetés

2024. április 25., csütörtök

Gyorskeresés

Hozzászólások

(#1) tgabi333


tgabi333
tag

Esetleg egy mysql-ben kiadott SET NAMES utf8; nem segített volna?

(#2) loszerafin válasza tgabi333 (#1) üzenetére


loszerafin
senior tag

Nem segített volna, mert attól még a tábla latin1-es kódolású marad.

Az, hogy milyen kódolással kommunikáljon a szerver a klienssel, azt a hibernate "magától"
eldönti, gondolom elég jól. Persze én rásegítettem

<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf8</property>
<property name="connection.charSet">utf-8</property>

Ezekkel a beállításokkal, sőt még a mysql connection url-be beírtam ilyesmiket, de a hibernate folyton latin1-gyel hozta létre a táblákat.
Ha én kézzel csináltam a táblákat utf8-ra, akkor jók voltak az ékezetek, szóval ez volt az egyetlen baj.
Gondolom, azért futnak bele ebbe a hibába ritkán az emberek, mert a táblákat általában egyszer hozzák létre, és nem java-ból.
A kis programom viszont, ha nem volt semmilyen tábla az adatbázisban, létrehozatta a hibernate-tel. Ekkor jött elő a hiba, hogy nem tudtam rávenni a hibernate-et, hogy utf8-as character set-tel hozza létre a táblákat.

[ Szerkesztve ]

(#3) tgabi333 válasza loszerafin (#2) üzenetére


tgabi333
tag

Értem, tehát a progid hozott létre táblát.

Ha táblát hozol létre és a lekérésben nincs konkrétan benne, hogy mi legyen a defautl charset, akkor az adatbázis default charset-je lesz.

A default charset-ek származása:

Adatázis motor default charset
Adatbázis default charset
Tábla default charset
Mező default charset

Tehát pl ha egy mezőt hozol létre explicit charset megadás nélkül, akkor a tábla charset-ét fogja használni.

Ha táblát hozol létre explicit charset megadás nélkül, akkor az adatbázisét
Ha adatbázist hozol létre explicit charset megadás nélkül, akkor a motorét.

Tehát a te esetedben - feltételezem - elegendő lenne az adatbázis default charset-jét megadni. Pontosabban collation-jét.

(#4) loszerafin válasza tgabi333 (#3) üzenetére


loszerafin
senior tag

Teljesen igazad van.

De - nem tudom, mennyire ismered a Hibernate-et - a Hibernate saját maga "dönti el", hogy hozza létre a táblát, milyen típusokkal.
Tehát nem adok ki ilyen utasításokat, hogy pl.: "create table ...".

A Hibernate pedig beírta a default charset-et latin1-nek. Ezen kellett változtatni.

(#5) tgabi333 válasza loszerafin (#4) üzenetére


tgabi333
tag

Értelek.

Persze, nyilvánvaló volt, hogy nem te adod ki a create utasítást.

Arra gondoltam, hogy ha esetleg az adatbázis collation-jét átállítod, akkor is latin1-el hozza létre a táblát?

Konkrétan ez úgy nézne ki a hibernate-ben, hogy ténylegesen a createe parancs végén megadja a default charset-et vagy nem. Ha nem, akkor jó megoldás lehet az adatbázis collation-jének állítása is.

De nem okoskodni szeretnék, a te megoldásod a legbiztosabb, mivel konkrétan definiálod...

(#6) loszerafin válasza tgabi333 (#5) üzenetére


loszerafin
senior tag

Jó gondolat, megnéztem a hibernate forrást, semmilyen latin1-re való utalást nem találtam.
Sőt, semmit, ami explicite beállítaná a charset-et.

Tehát NEM a Hibernate készíti a táblát latin1-ben, a Hibernate csak nem ad rá módot, hogy megváltoztassam a a tábla charset-jét, így az az adatbázis default character set-je lesz.

Copyright © 2000-2024 PROHARDVER Informatikai Kft.