Я использую Spring 4.3.1 с JPA 2.0 и подключен к MSSQL. Я использую метод сохранения JpaRepository для вставки и обновления данных. В одном из полей есть nvarchar, который может содержать специальные символы, такие как латиница, китайский.
Кроме того, я установил ниже свойства JPA в applicationContext-hibernate.xml.
<prop key="hibernate.connection.CharSet">UTF-8</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
Когда я сохраняю данные, все специальные символы сохраняются как вопросительные знаки (??). Предлагаемое решение состояло в том, чтобы добавить «N» перед запросом на обновление, чтобы сохранить вставленные специальные символы. Однако я нигде не вижу, как добавить «N» в метод сохранения JpaRepository. Какие-либо предложения?
UTF16
? Тип данных SQL-ServerVARCHAR
неUTF-8
, а своего рода расширенный ASCII (в зависимости отCOLLATION
). И обязательно используйте столбецNVARCHAR
в качестве цели. Если вы сохраните это в столбцеVARCHAR
, вы также получите вопросительные знаки. - person Shnugo   schedule 04.01.2018UTF-8
(ну, последняя версия поддерживаетUTF-8
, но только дляBULK
нагрузок...). Любая строка, которую вы отправляете на SQL-Server, будет воспринята либо как 1-byte-encoded-extended-ASCII (VARCHAR
), либо как2-byte-enocded unicode / UTF-16 / UCS-2
(NVARCHAR
). Какой бы язык или инструмент вы ни использовали для связи с SQL-Server, лучше всего использовать2-byte-unicode
- person Shnugo   schedule 04.01.2018UTF-8
- person Shnugo   schedule 04.01.2018