Aktualnie tworzę aplikację webową Spring MVC, a baza danych jest istotną częścią zaplecza. Z jakiegoś powodu Spring odmawia przetwarzania danych jako UTF-8. Ponieważ widoki, zasoby i przeglądarki są ustawione na Unicode, tak samo jak tabele w bazie danych (a także sporo podobnych pytań), ustaliłem, że problem leży w połączeniu z bazą danych.Jak ustawić właściwości useNicode = true i characterEncoding = utf8 na zarządzanym przez sprężynę połączeniu JDBC MySQL
Sterownik JDBC należy zapewnić dwie pozycje w connectionProperties: useUnicode (ustawiony na tak i characterEncoding (zestaw do utf8) Okazuje się jednak, że to niemożliwe
JDBC jest.. fasola, i jako taki jest skonfigurowany poprzez plik XML, tak jak poniżej:
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/<database>" />
<property name="username" value="<not telling>" />
<property name="password" value="<not telling>" />
taka konfiguracja konwertuje wszystkie znaki niealfanumeryczne pobierane z bazy danych (takich jak strzałki lub greckimi literami) pod znakiem zapytania znaki. Co jest oczywiście niedopuszczalne.
Próbowałem wielu rozwiązań: określono JDBC URL jako jdbc:mysql://localhost:3306/<database>?useUnicode=yes&characterEncoding=utf8
, grał z my.ini
pliku (i MySQL Workbench), aby wymusić wszystko w bazie danych do domyślnego utf8
charset, i coś, co spowodowało największy ból głowy: dodawanie <property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />
. Okazuje się, że dosłownie niemożliwe jest ustawienie dwóch właściwości connectionProperties w jednym komponencie bean, ponieważ ... nie ma nigdzie żadnego znaku separującego (komponent bean spróbuje odczytać go jako próbę ustawienia yes;characterEncoding=utf8
jako wartość useUnicode
). Moje pytanie brzmi: jak mam utf8?
Być może potrzebujesz również średnika po 'characterEncoding = utf8', jak wspomniano tutaj: http://stackoverflow.com/questions/13359683/how-to-use-useunicode-yes-characterencoding-utf-8-with- dbcp – GriffeyDog
@GriffeyDog Umieszczam tam średnik, nie kopiowałem go z kodu. Nie pozwoli mi się skompilować bez jednego (no cóż, będzie - ale wkrótce dostanę wyjątek). –