我正在尝试使用JPA保留用户信息(名字和姓氏),但是varchar列不接受阿拉伯语,马拉雅拉姆语,泰卢固语等语言的字符,包括表情符号。
表结构如下:
@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
任何帮助将不胜感激。
答案 0 :(得分:0)
您的字符集是什么?您可以尝试更改数据库的字符集。也许是utf-8
。
特殊字符可能是4个字节,您可以使用utf8mb4
。