【问题标题】:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'aboutMeText' at row 1com.mysql.jdbc.MysqlDataTruncation:数据截断:第 1 行的“aboutMeText”列的数据太长
【发布时间】:2017-01-30 14:02:26
【问题描述】:

我正在尝试使用 Spring-JPA 更新列的值,值是表情符号/表情符号。 但收到错误提示 java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F...' for column

这是连接网址-

jdbc.url=jdbc:mysql:localhost:3306/woo?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8mb4_unicode_ci&characterSetResults=UTF-8

这里是调用代码

userProfile.setAboutMeText("\uD83D\uDE04\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83D\uDE02\uD83D\uDE20");

这是实体

 @Entity
public class UserProfile implements Serializable {

    @Column(length = 1000)
private String aboutMeText;
@Id
private Long id;
public Long getId() {
    return id;
}

public void seId(Long id) {
    this.id = id;
}


public String getAboutMeText() {
   return JsonEscape.unescapeJson(aboutMeText);


}
 public void setAboutMeText(String aboutMeText) {
   this.aboutMeText = JsonEscape.escapeJson(aboutMeText);


}

这是完整的错误:

HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: Data truncation: Data too long for column 'aboutMeText' at row 1; SQL [n/a]; nested exception is org.hibernate.exception.DataException: Data truncation: Data too long for column 'aboutMeText' at row 1</h1>
    <div class="line"></div>
    <p>
        <b>type</b> Exception report
    </p>

<pre>org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: Data truncation: Data too long for column 'aboutMeText' at row 1; SQL [n/a]; nested exception is org.hibernate.exception.DataException: Data truncation: Data too long for column 'aboutMeText' at row 1
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:981)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:871)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我尝试并检查了有关 stackoverflow 、 stackexchange 等的各种帖子。并进行了一些更改,但仍然无法解决问题。

【问题讨论】:

  • 将排序规则更改为 utf8_unicode_ci...check thisthis
  • 以前是 utf8_unicode_ci,但我遇到了同样的错误,所以将其更改为 utf8mb4_unicode_ci
  • 您存储在该列中的是二进制数据吗?那么不应该是 byte[] 而不是 blob 类型的 String 吗?
  • 它是普通文本、表情符号/表情符号和特殊字符的组合,例如: 5Cud83d%5Cude04%5Cud83d%5Cudc68%5Cu200d%5Cu2764%”。它的表情符号和特殊字符的编码值。
  • userProfile.setAboutMeText("\uD83D\uDE20\uD83D\uDE20\uD83D\uDE07\uD83D\uDE02\uD83D\uDE02\uD83D\uDE20\uD83D\uDE20\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE07\uD83D\uDE02\uD83D\uDE20\uD83D\uDE20\uD83D\uDE20\uD83D\uDE20\uD83D\uDE20\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE20\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE02\uD83D\uDE22\uD83D\uDE22\uD83D\uDE02\uD83D\uDE20\uD83D\uDE20\uD83D\uDE20\uD83D\uDE20\uD83D");

标签: spring hibernate spring-mvc jpa spring-data-jpa


【解决方案1】:

通过 alter 在代码和数据库中将 aboutMeText 的大小从 1000 增加到 3000。

@Column(length = 3000) 
private String aboutMeText;

这样做 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long exception Gone 我得到了想要的输出。

【讨论】:

  • 数据库中的列定义呢?
  • 在 db 中也增加了...alter table UserProfile modify aboutMeText varchar(3000); 这样做现在我可以发送至少 250 个表情符号,之前我只能发送 85 个表情符号,如果我输入的表情符号超过 85 个,我也会获取数据长例外。这意味着每个表情符号字符都会被编码,因此大小会增加。
【解决方案2】:

您可以将此列的数据类型从varchar(255)更改为TEXT,长度为65535字节。只需将您的列标记如下:

@Column(columnDefinition = "TEXT")
private String myLongDataColumn;

或者您可以使用其他注释。例如,@Lob。详情请访问此链接https://www.baeldung.com/jpa-annotation-postgresql-text-type

【讨论】:

    【解决方案3】:

    我的问题也一样,但我注意到我正在使用
    “更新 ” 它已经构建了一个 表中已经定义了长度的表,所以我将其更改为 “ 创建” 我的问题解决了,因为它在我们运行查询时创建了一个新表

    【讨论】:

      猜你喜欢
      • 2015-11-28
      • 2014-09-28
      • 2012-11-14
      • 1970-01-01
      • 2014-02-26
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多