2016-09-22 2 views
2

Ich versuche, Wert einer Spalte mit Spring-JPA zu aktualisieren, Werte sind Emoji/Smilies. aber immer Fehler sagen java.sql.BatchUpdateException: Falsche String-Wert: '\ xF0 \ x9F \ x98 \ x84 \ xF0 \ x9F ...' für Spaltecom.mysql.jdbc.MysqlDataTruncation: Daten abgeschnitten: Daten zu lang für Spalte 'aboutMeText' in Zeile 1

Hier ist die Verbindung URL-

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

Hier ist der aufrufende Code

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

Hier ist die Einheit

@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); 


} 

und

hier sind die kompletten Fehler:

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) 

Ich habe versucht, und überprüfte verschiedene Beiträge auf Stackoverflow, Stack etc .. und führte einige Änderungen, aber immer noch nicht in der Lage, das Problem zu lösen.

+0

Ändern der Sortierung zu utf8_unicode_ci ... [Aktivieren Sie diese] (http://Stackoverflow.com/a/20431999/4117061) und [diese] (http://Stackoverflow.com/a/10959780/4117061) –

+0

vorher Es war utf8_unicode_ci, aber ich bekam den gleichen Fehler, also änderte ich es in utf8mb4_unicode_ci –

+0

Ist es eine binäre Daten, die Sie in dieser Spalte speichern? Dann sollte nicht Byte [] anstelle von String mit Blob-Typ sein? –

Antwort

3

erhöhte Größe von aboutMeText von 1000 bis 3000, in Code und db durch alter.

@Column(length = 3000) 
private String aboutMeText; 

Dabei com.mysql.jdbc.MysqlDataTruncation: Datenabschneide: Daten zu lange Ausnahme gegangen und ich habe Ausgang gewünscht.

+0

Was ist mit der Spaltendefinition in Ihrer Datenbank? –

+0

erhöht in db too ... 'table alter UserProfile modify aboutMeText varchar (3000);' so kann ich nun mindestens 250 emojis senden früher konnte ich nur 85 emojies senden, wenn ich mehr als 85 emojies die ich bekam eingeben würde Daten zu lange Ausnahme. Das bedeutet, dass jedes Emoji-Zeichen kodiert wird und somit die Größe zunimmt. –

Verwandte Themen