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/[...]igure-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, botów: 0