В настоящее время я создаю веб-приложение Spring MVC, и база данных является важной частью бэкэнд. Однако по какой-либо причине Spring отказывается обрабатывать данные как UTF-8. Поскольку представления, ресурсы и браузеры настроены на Unicode, а также таблицы в базе данных (а также чтение нескольких заданных вопросов), я установил, что проблема заключается в подключении к базе данных.
Драйверу JDBC должно быть предоставлено два элемента в connectionProperties: useUnicode (установлено в yes и characterEncoding (установлено в utf8). Оказывается, однако, невозможно.
JDBC - это bean, и как таковой конфигурируется через XML файл, например:
<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>" />
Эта настройка преобразует все небуквенные символы, вытащенные из базы данных (например, стрелки или греческие буквы) в вопросительные знаки. Что, очевидно, неприемлемо.
Я попробовал несколько решений: задал URL-адрес JDBC как jdbc:mysql://localhost:3306/<database>?useUnicode=yes&characterEncoding=utf8
, играл с файлом my.ini
(и MySQL Workbench), чтобы заставить все в базе данных по умолчанию использовать utf8
charset и что-то, что вызвало наибольшую головную боль: добавив <property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />
. Оказывается, буквально невозможно установить два connectionProperties в пределах одного bean, потому что... там никакой разделительный символ не упоминается нигде (bean будет пытаться прочитать его как пытающийся установить yes;characterEncoding=utf8
как значение useUnicode
). Поэтому мой вопрос: как я использую utf8?