列的字符串值不正确

时间:2017-01-20 21:14:27

标签: mysql hibernate grails

尝试将条目从我的应用程序保存到mysql DB时出现此错误

  

Hibernate操作:无法执行语句;未分类   SQL [n / a]的SQLException; SQL状态[HY000];错误代码[1366];   字符串值不正确:列的'\ xE2 \ x80 \ x8BShe ...'   第1行'extracted_text';嵌套异常是java.sql.SQLException:   字符串值不正确:列的'\ xE2 \ x80 \ x8BShe ...'   第1行的'extracted_text'           在com.some.scanner.RequestService。$ tt__handleMessage(RequestService.groovy:67)

我的表格创建如下:

CREATE TABLE `request` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `version` bigint(20) NOT NULL,
  `doc_hash` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `extracted_text` longtext COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  KEY `FK414EF28FD3E87920` (`batch_id`),
) ENGINE=InnoDB AUTO_INCREMENT=20025 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我的实体映射在Grails中非常简单

class Request {
  String docHash
  String extractedText

  static mapping = {
    extractedText type: 'text'
  }
}

我是否需要更改编码类型?如果是这样,到底是什么?

1 个答案:

答案 0 :(得分:0)

设置数据库属性useUnicodecharacterEncoding。它们直接传递给您的JDBC驱动程序:https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/PoolConfiguration.html#getDbProperties%28%29

dataSource {
  url = 'jdbc:mysql://...'
  properties {
    dbProperties {
      useUnicode=true
      characterEncoding='UTF-8'
     }
  }
}

关于MySQL Connect字符集(包括UTF-8的拼写)的更多内容:http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-charsets.html

特定于MySQL的配置属性进入dbPropertieshttp://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

...除非它们已被http://docs.grails.org/latest/guide/conf.html#dataSource的主要dataSource属性覆盖 或者来自:http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Common_Attributes

的“额外”properties