2019-06-20 09:37:06,266 ERROR ~ Incorrect string value: '\xF0\x9F\x92\x99\xE6\xB8...' for column 'scenic_info' at row 1
2019-06-20 09:37:06,268 ERROR ~ Internal Server Error (500) for request GET /travel/interface/tongcheng/getThreadGoodsSku?productId=283
play.exceptions.JavaExecutionException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:242)
at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:237)
at play.Invoker$Invocation.run(Invoker.java:264)
at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:217)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224)
at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:108)
at jobtobp.ConsumerSecnicJobToBp.updateModifyTempData(ConsumerSecnicJobToBp.java:300)
at jobtobp.ConsumerSecnicJobToBp.handleScenicList(ConsumerSecnicJobToBp.java:116)
at jobtobp.ConsumerSecnicJobToBp.ConsumerSecnicData(ConsumerSecnicJobToBp.java:79)
at jobtobp.GetSecnicJobToBp.getSecnicData(GetSecnicJobToBp.java:65)
at controllers.remote.tongcheng.OrderIDAction.queryIdProGoodsSku(OrderIDAction.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:750)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:708)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:684)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:679)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:172)
... 10 more
Caused by: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:219)
at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)
at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)
at org.hibernate.ejb.QueryImpl.internalExecuteUpdate(QueryImpl.java:188)
at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
... 24 more
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x99\xE6\xB8...' for column 'scenic_info' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:210)
... 28 more
play.exceptions.JavaExecutionException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:242)
at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:237)
at play.Invoker$Invocation.run(Invoker.java:264)
at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:217)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224)
at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:108)
at jobtobp.ConsumerSecnicJobToBp.updateModifyTempData(ConsumerSecnicJobToBp.java:300)
at jobtobp.ConsumerSecnicJobToBp.handleScenicList(ConsumerSecnicJobToBp.java:116)
at jobtobp.ConsumerSecnicJobToBp.ConsumerSecnicData(ConsumerSecnicJobToBp.java:79)
at jobtobp.GetSecnicJobToBp.getSecnicData(GetSecnicJobToBp.java:65)
at controllers.remote.tongcheng.OrderIDAction.queryIdProGoodsSku(OrderIDAction.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:750)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:708)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:684)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:679)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:172)
... 10 more
Caused by: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:219)
at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)
at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)
at org.hibernate.ejb.QueryImpl.internalExecuteUpdate(QueryImpl.java:188)
at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
... 24 more
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x99\xE6\xB8...' for column 'scenic_info' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:210)
... 28 more
2019-06-20 09:37:12,479 ERROR ~ getTicketProductDetail ---1
2019-06-20 09:37:12,482 ERROR ~ getTicketProductDetail ---2
2019-06-20 09:37:12,484 ERROR ~ getTicketProductDetail ---3
2019-06-20 09:37:12,486 ERROR ~ getTicketProductDetail ---4
2019-06-20 09:37:12,487 ERROR ~ getTicketProductDetail ---5
2019-06-20 09:37:12,488 ERROR ~ getTicketProductDetail ---6
2019-06-20 09:37:12,490 ERROR ~ getTicketProductDetail ---7
2019-06-20 09:37:12,517 ERROR ~ getTicketProductDetail ---8
2019-06-20 09:37:12,519 ERROR ~ getTicketProductDetail ---9
2019-06-20 09:37:12,523 ERROR ~ getTicketProductDetail ---10
2019-06-20 09:37:12,525 ERROR ~ getTicketProductDetail ---11
2019-06-20 09:37:13,310 ERROR ~ [DUBBO] Unexpected error occur at send statistic, cause: Forbid consumer 10.10.2.94 access service com.alibaba.dubbo.monitor.MonitorService from registry 10.10.1.215:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist)., dubbo version: 2.5.3, current host: 10.10.2.94
com.alibaba.dubbo.rpc.RpcException: Forbid consumer 10.10.2.94 access service com.alibaba.dubbo.monitor.MonitorService from registry 10.10.1.215:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist).
at com.alibaba.dubbo.registry.integration.RegistryDirectory.doList(RegistryDirectory.java:579)
at com.alibaba.dubbo.rpc.cluster.directory.AbstractDirectory.list(AbstractDirectory.java:73)
at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.list(AbstractClusterInvoker.java:260)
at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:219)
at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:72)
at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52)
at com.alibaba.dubbo.common.bytecode.proxy0.collect(proxy0.java)
at com.alibaba.dubbo.monitor.dubbo.DubboMonitor.send(DubboMonitor.java:113)
at com.alibaba.dubbo.monitor.dubbo.DubboMonitor$1.run(DubboMonitor.java:70)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
先說明,服務器上使用的數據庫是mysql,這個問題出現的原因,就是本地數據庫,測試數據庫,模擬數據庫,跟線上數據庫的
這個表的字符集編碼都是utf8mb4,可以奇怪就奇怪在,同上的數據,同樣的字符集編碼,在本地,測試,模擬三個數據庫都沒有問題的數據,在線上就是不行,後來我就一點一點排查問題,首先這個表中不是所有的字段都能插入只有這個'scenic_info' 字段不行,這個字段是longtext字段,網上網友們許多都是把數據庫表的字符集修改爲utf8mb4就成,我這個是創建表的時候就是這個字符集,直到後來,我才發現線上環境的這個表這個字段之所以插入不進去就是以爲,插入的數據中有漢字,把插入的字符串中是漢字全部轉碼爲unicode編碼就可以插入,所以我下面記錄了這兩個工具方法
/**
*
* 描述: unicode 轉 漢字
* @author:
* @date:2019年6月20日 下午4:31:15
* @param unicode
* @return
*/
public static String unicodeToCn(String unicode) {
/** 以 \ u 分割,因爲java註釋也能識別unicode,因此中間加了一個空格*/
String[] strs = unicode.split("\\\\u");
String returnStr = "";
// 由於unicode字符串以 \ u 開頭,因此分割出的第一個字符是""。
for (int i = 1; i < strs.length; i++) {
returnStr += (char) Integer.valueOf(strs[i], 16).intValue();
}
return returnStr;
}
/**
*
* 描述: 只把字符串中的漢字轉化爲unicode
* @author:
* @date:2019年6月20日 下午4:48:49
* @param cn
* @return
*/
public static String cnToUnicodeNew(String cn) {
char[] chars = cn.toCharArray();
String returnStr = "";
for (int i = 0; i < chars.length; i++) {
if (!isChineseChar(chars[i])) {
returnStr += chars[i];
}else{
returnStr += "\\u" + Integer.toString(chars[i], 16);
}
}
return returnStr;
}
/**
*
* 描述: 字符轉unicode字符
* @author:
* @date:2019年6月20日 下午4:31:41
* @param cn
* @return
*/
public static String cnToUnicode(String cn) {
char[] chars = cn.toCharArray();
String returnStr = "";
for (int i = 0; i < chars.length; i++) {
returnStr += "\\u" + Integer.toString(chars[i], 16);
}
return returnStr;
}
/**
* 判斷一個字符是否是漢字
* PS:中文漢字的編碼範圍:[\u4e00-\u9fa5]
*
* @param c 需要判斷的字符
* @return 是漢字(true), 不是漢字(false)
*/
public static boolean isChineseChar(char c) {
return String.valueOf(c).matches("[\u4e00-\u9fa5]");
}