Hibernate数据访问上的JDBC异常:SQL的SQLException [n / a]; SQL状态[HY000];错误代码[1366]

时间:2018-08-02 09:06:28

标签: mysql hibernate jpa jdbc spring-data-jpa

我正在尝试使用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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的字符集是什么?您可以尝试更改数据库的字符集。也许是utf-8

特殊字符可能是4个字节,您可以使用utf8mb4