Я пытаюсь сохранить информацию пользователя (имя и фамилию) с помощью JPA, но столбцы varchar не принимают символы таких языков, как арабский, малаялам, телугу и т.д., Включая emojies.
Структура таблицы выглядит следующим образом:
@Entity
public class UserTrueCallerInfo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
}
а затем геттеры и сеттеры.
UserTrueCallerInfo userTrueCallerInfo = new UserTrueCallerInfo();
userTrueCallerInfo.setFirstName("ABC");
userTrueCallerInfo.setLastName("അസാദ്");
userTrueCallerInfoRepository.save(userTrueCallerInfo);
При этом я получаю следующую ошибку,
> JDBC exception on Hibernate data access: SQLException for SQL [n/a]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x90\x90\x90\xF0\x90...' for column 'lastName' at row 1; nested exception is org.hibernate.exception.GenericJDBCException: Incorrect string value: '\xF0\x90\x90\x90\xF0\x90...' for column 'lastName' at row
**NOTE** default character set is "UTF-8" and i tried using 4 byte "utf8mb4" as follows
> ALTER TABLE UserTrueCallerInfo CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Тем не менее я не могу сохранить данные пользователя в таблице. Ниже вы найдете persistence.properties
jdbc.url=jdbc:mysql://localhost:3306/epay?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_unicode_ci&characterSetResults=UTF-8
jdbc.username=abc
jdbc.password=abc**
jdbc.driver.classname=com.mysql.jdbc.Driver
jdbc.show.sql=false
jdbc.generate.ddl=true
jdbc.database=MYSQL
jdbc.database.platform=org.hibernate.dialect.MySQL5InnoDBDialect
Любая помощь будет оценена по достоинству.
Какова ваша кодировка? Вы можете попробовать изменить charset базы данных. Может быть utf-8
.
Специальный символ может быть 4 байта, вы можете использовать utf8mb4
.