Кодировка UTF-16 spring mvc и mysql

  <filter>
    <filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

1) Как я могу включить кодировку UTF-16 в весеннем фильтре? Мне нужно взять символ UTF-16 или UCS2 из текстового поля в JSP в Spring Controller и вставить в Mysql.

2) Как я могу вставить данные UTF-16 в mysql

Я настраиваю URL-адрес JDBC, например

"?useUnicode=yes&characterEncoding=UTF-8"

моя схема столбца

`utf16` varchar(150) CHARACTER SET utf16 COLLATE utf16_unicode_ci NOT NULL,

person Kulasekar Reddy    schedule 06.07.2017    source источник


Ответы (1)


Я не вижу причин использовать CHARACTER SET utf16 или ucs2. Каково ваше обоснование такого?

CHARACTER SET utf8mb4 – это стандарт, который будет использоваться в будущем. Он соответствует UTF-8 вне MySQL, как указано в "?useUnicode=yes&characterEncoding=UTF-8"

Если вам действительно нужно CHARACTER SET utf16 в таблице, то оно должно работать так, как представлено. MySQL преобразует указанную клиентскую кодировку в указанную кодировку столбца. Да, utf16 и utf8 - разные кодировки.

person Rick James    schedule 08.07.2017
comment
«Не вижу смысла использовать CHARACTER SET utf16 или ucs2» — иногда приходилось работать с тем, что есть - person msangel; 16.11.2020
comment
@msangel — объявить, что клиент использует такую ​​кодировку, но объявить столбцы utf8. - person Rick James; 17.11.2020
comment
Ужасающий факт: некоторые устаревшие базы данных не поддерживают UTF8 - person msangel; 17.11.2020
comment
согласно en.wikipedia.org/wiki/UTF-16#History ucs2 был разработан в конце 1980-х (изначально назывался unicode), а utf16 и utf8 — в конце 1990-х, так что разница почти в 10 лет - person msangel; 17.11.2020
comment
@msangel - Но вам не обязательно продолжать использовать ucs2. При переходе на современную базу данных конвертируйте в utf8. MySQL упрощает это, позволяя указать, что ввод закодирован в ucs2, а набор данных закодирован в utf8. - person Rick James; 17.11.2020
comment
Эта база данных как терабайты важных исторических данных, от нее зависит слишком много сервисов, и даже если миграция на более современную является хорошей идеей, это требует больших затрат времени и денег для компании. Как программист, принятие такого решения не входит в мою ответственность. У меня есть только требование - хранить некоторые данные в какой-то базе данных. И мне просто приходится иметь дело с тем фактом, что эта база данных является устаревшей. - person msangel; 17.11.2020
comment
@msangel - Кажется, я заблудился. Вы пытаетесь читать данные? Обновить данные? Добавить в набор данных? Или что? - person Rick James; 17.11.2020
comment
Мне нужно вставить данные в устаревшую базу данных, и эта база данных выдает исключение, если кодовые точки текстовых полей выходят за пределы диапазона ucs2. ucs2 имеет ограничение в 65k кодовых точек. utf-16 имеет 1112k кодовых точек. ucs2 не является utf-16. - person msangel; 17.11.2020
comment
@msangel - Можете ли вы указать конкретного персонажа, который иллюстрирует проблему. Может быть, я смогу найти обходной путь. - person Rick James; 18.11.2020
comment
обходной путь уже найден там: stackoverflow.com/questions/64862893/ - person msangel; 18.11.2020