Ustawienie kodowania UTF-8

0

Witam,

Próbuje zapisać zawartość formularza przesłanego przez apke klienta w bazie MySQL'a, jednakże w miejsce polskich znaków malują się znaki zapytania. Po stronie serwera korzystam z Wildfly'a, EJB oraz JPA/Hibernate.

Sprawdzałem co jest dostarczane serwerowi: form.getContents() - i w tym miejscu, encja wciąż zwraca polskie znaki. Po wywołaniu entityManager.persist(form) - polskie znaki w bazie zamieniają się na ?.

  1. Tabele w bazie mam ustawione na UTF-8: CHARSET=utf8 COLLATE=utf8_unicode_ci.

  2. Próbowałem ustawić kodowanie poprzez dodanie useUnicode=yes, characterEncoding=UTF-8, characterSetResults=UTF-8 oraz connectionCollation=utf8_general_ci w connection URL: jdbc:mysql://localhost/db?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8$amp;characterSetResults=UTF-8&connectionCollation=utf8_general_ci, jednakże ten sposób nie działa.

Fragment pliku standalone-full.xml, z którego korzysta Wildfly:

<!-- -->
<datasources>
	<datasource jta="true" jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQLDS" enabled="true" use-ccm="true">
		<connection-url>jdbc:mysql://localhost/db?autoReconnect=true&amp;amp;useUnicode=yes&amp;amp;characterEncoding=UTF-8$amp;characterSetResults=UTF-8&amp;amp;connectionCollation=utf8_general_ci</connection-url>
		<driver-class>com.mysql.jdbc.Driver</driver-class>
		<driver>mysqlDriver</driver>
		<security>
			<user-name>user</user-name>
			<password>***</password>
		</security>
		<validation>
			<check-valid-connection-sql>select 1</check-valid-connection-sql>
			<validate-on-match>true</validate-on-match>
			<background-validation>false</background-validation>
		</validation>
		<timeout>
			<set-tx-query-timeout>false</set-tx-query-timeout>
			<blocking-timeout-millis>0</blocking-timeout-millis>
			<idle-timeout-minutes>0</idle-timeout-minutes>
			<query-timeout>0</query-timeout>
			<use-try-lock>0</use-try-lock>
			<allocation-retry>0</allocation-retry>
			<allocation-retry-wait-millis>0</allocation-retry-wait-millis>
		</timeout>
		<statement>
			<share-prepared-statements>false</share-prepared-statements>
		</statement>
	</datasource>
	<drivers>
		<driver name="mysqlDriver" module="com.mysql">
			<xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
	</driver>
	</drivers>
</datasources>
<!-- -->						

Czy ktoś borykał się już z tym problemem i znalazł rozwiązanie?

0

miałem podobny problem, w aplikacji JSF, MySQL. zapisywały się ??? zamiast ąęł w DB pomimo ustawienia wszędzie UTF-8.
Okazało sie że globalne ustawienia MySQL nie są UTF-8. po zmianie w pliku konfiguracyjnym Mysqla działa.
przydatny link: http://dba.stackexchange.com/questions/8288/how-to-configure-global-charset-on-mysql

0

Z tego co wiem w mysql utf8 to nie jest tak naprawdę prawdziwy utf8 tzn nie jest zgodny ze specyfikacją, a dokładnie dopiero wersja utf8mb4 jest zgodna w 100% ze specyfikacją utf8.

W mysql z tego co pamiętam trzeba ustawić kodowanie na bazę danych i tabele.

1 użytkowników online, w tym zalogowanych: 0, gości: 1