MySQL中插入emoji表情报错的问题解决方案

操作:在内容中输入表情,然后点击查询,报错。
在这里插入图片描述
其中这个请求的处理代码如下:
在这里插入图片描述
请求的内容为:

1
/feedbacks?page=1&size=20&content=%F0%9F%98%AF%F0%9F%98%A2

日志如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
2018-12-21 10:11:49,731 [http-nio-8889-exec-10]  INFO c.h.d.a.SystemAdvice - execute method : getFeedbacks
2018-12-21 10:11:49,733 [http-nio-8889-exec-10] ERROR c.h.d.a.SystemAdvice - aspect execute error :
org.springframework.jdbc.UncategorizedSQLException:
### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
### The error may exist in class path resource [mappers/BizFeedbackMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT count(0) FROM biz_feedback WHERE content LIKE ? AND deleted = ?
### Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
; uncategorized SQLException; SQL state [HY000]; error code [1267]; Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation
'like'; nested exception is java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy77.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy101.getSortedResultByConditionList(Unknown Source)
at com.haylion.dynamicbus.service.FeedbackService.getFeedbacks(FeedbackService.java:40)
at com.haylion.dynamicbus.service.FeedbackService$$FastClassBySpringCGLIB$$298f5809.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
at com.haylion.dynamicbus.advice.SystemAdvice.doAroundAdvice(SystemAdvice.java:44)
at sun.reflect.GeneratedMethodAccessor348.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.haylion.dynamicbus.service.FeedbackService$$EnhancerBySpringCGLIB$$ab8db9b2.getFeedbacks(<generated>)
at com.haylion.dynamicbus.controller.FeedbackController.getFeedbacks(FeedbackController.java:69)
at com.haylion.dynamicbus.controller.FeedbackController$$FastClassBySpringCGLIB$$825dd925.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.haylion.dynamicbus.controller.FeedbackController$$EnhancerBySpringCGLIB$$f311ce89.getFeedbacks(<generated>)
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 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:142)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:890)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.haylion.dynamicbus.facade.filter.TraceCopyFilter.doFilter(TraceCopyFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:498)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.haylion.dynamicbus.interceptor.sql.MyPageInterceptor.executeAutoCount(MyPageInterceptor.java:211)
at com.haylion.dynamicbus.interceptor.sql.MyPageInterceptor.intercept(MyPageInterceptor.java:114)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy154.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at sun.reflect.GeneratedMethodAccessor116.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
... 90 common frames omitted
2018-12-21 10:11:49,734 [http-nio-8889-exec-10] ERROR c.h.d.f.e.ExceptionHandle - Exception for handle
org.springframework.jdbc.UncategorizedSQLException:
### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
### The error may exist in class path resource [mappers/BizFeedbackMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT count(0) FROM biz_feedback WHERE content LIKE ? AND deleted = ?
### Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
; uncategorized SQLException; SQL state [HY000]; error code [1267]; Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation
'like'; nested exception is java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy77.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy101.getSortedResultByConditionList(Unknown Source)
at com.haylion.dynamicbus.service.FeedbackService.getFeedbacks(FeedbackService.java:40)
at com.haylion.dynamicbus.service.FeedbackService$$FastClassBySpringCGLIB$$298f5809.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
at com.haylion.dynamicbus.advice.SystemAdvice.doAroundAdvice(SystemAdvice.java:44)
at sun.reflect.GeneratedMethodAccessor348.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.haylion.dynamicbus.service.FeedbackService$$EnhancerBySpringCGLIB$$ab8db9b2.getFeedbacks(<generated>)
at com.haylion.dynamicbus.controller.FeedbackController.getFeedbacks(FeedbackController.java:69)
at com.haylion.dynamicbus.controller.FeedbackController$$FastClassBySpringCGLIB$$825dd925.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.haylion.dynamicbus.controller.FeedbackController$$EnhancerBySpringCGLIB$$f311ce89.getFeedbacks(<generated>)
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 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:142)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:890)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.haylion.dynamicbus.facade.filter.TraceCopyFilter.doFilter(TraceCopyFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:498)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.haylion.dynamicbus.interceptor.sql.MyPageInterceptor.executeAutoCount(MyPageInterceptor.java:211)
at com.haylion.dynamicbus.interceptor.sql.MyPageInterceptor.intercept(MyPageInterceptor.java:114)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy154.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at sun.reflect.GeneratedMethodAccessor116.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
... 90 common frames omitted
2018-12-21 10:11:49,734 [http-nio-8889-exec-10] INFO c.h.d.f.a.ResponseAdvice - Trace log is ====> {"url":"/bus/feedbacks","httpMethod":"GET","reqHeader":{"x-real-ip":
"10.10.0.195","referer":"https://xxxxxxx.cn/","accept-language":"zh,en;q=0.9,ja;q=0.8,zh-TW;q=0.7,fr;q=0.6","host":"10.10.0.103","connection":"close","x-forwar
ded-for":"10.10.0.195","userid":"435","accept-encoding":"gzip, deflate, br","accept":"application/json, text/plain, */*","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win6
4; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36","token":"67f7df9448dd691c71f57bcb95891bcf"},"reqParams":"page=1&size=20&content=%F0%9F%
98%AF%F0%9F%98%A2","requestBody":"","respParams":"{\"code\":500,\"message\":\"system is busy\",\"data\":{}}","startTime":1545358309731,"spendTime":3}

从网上搜了一个解决方案,生效了:
在这里插入图片描述
然后重启MySQL,service mysql restart
链接地址为:https://dba.stackexchange.com/questions/89355/unable-to-insert-utf8mb4-characters-in-mysql-5-6

在这里插入图片描述
以下关于MySQL中的字符相关的知识来自链接:https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html

通过分析,得出一下结论:
like里面填写的数据的编码格式为utf8,为character_set_server的值,而表里面的编码为utf8mb4,所以他们的值的字符序列是不一样的,因此造成了上述问题的出现。所以解决的办法是将服务器的字符改成utf8mb4,这样like的值就是utf8mb4编码格式,字符序就与表中的字段一致,问题解决。

AWS使用过程中遇到的问题

RDS连接不上数据库的排除办法

检查RDS的安全组。初次尝试,数据库连不上;后面又重试着不使用默认的安全组进行配置,可以连上。这里有一个检测是否可以成功连接的命令,如果连不上,可以试试这样能不能检测到连接。
在这里插入图片描述
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/CHAP_Troubleshooting.html

EC2安装的数据库无法连接

  1. 确保3306端口已经打开。
    在这里插入图片描述
  2. 确保已经在MySQL的配置文件中,改成允许远程访问。
    系统相关信息如下:
    在这里插入图片描述
    MySQL版本后面因为删掉了,版本信息找不到了。这个配置文件的路径就当一个参考吧,到时候可能还需要自己找一找这个配置文件的路径。
    配置文件路径:/etc/mysql/mysql.conf.d/mysqld.cnf
    在这里插入图片描述
  3. 如果root密码已经忘记,那么可以考虑使用mysqladmin等一系列操作重设MySQL的root密码

APUE系列·Mac下环境配置

心中的执念太多、乘着年轻,我想去一一实现。也许不为目的,就是为了实现当初给自己吹的牛逼。优秀的人那么多,为什么我不是其中一个?付出完全匹配不上野心,可否知道该如何去做?自律是一件可怕的事,因为那意味着战胜了自己的惰性。看见一个榜样、我觉得你将是我追逐的目标。—–开篇

前言

开始学习《UNIX环境高级编程》。按照之前对这本书的理解,这本书是一个介绍UNIX内核API的书,在介绍UNIX API的同时,还会讲解与之相关的知识。这本书是一本算得上比较底层的书。之前学习过,但是止步于第四章,原因已经忘记了。不过之前是在Ubuntu下,现在是在Mac下,可能这也是我执着于Mac的一个原因,因为Mac的内核是UNIX系的,可以用来运行APUE中的代码。想想这真的算是一种执念,所以不能没有下文。

配置运行环境

网址:http://www.apuebook.com/apue3e.html 或者直接下载:http://www.apuebook.com/src.3e.tar.gz
下载好了之后,解压,进入解压后的目录,并将error.capue.h拷贝到系统的相应路径,如下:

1
2
cp include/apue.h /usr/local/include
cp lib/error.c /usr/local/include/

然后将拷贝过去的apue.h中的最后一个#endif前,将error.c使用#include进去,如下:
在这里插入图片描述

测试

在这里插入图片描述
编译并运行,结果如下:
在这里插入图片描述
或者直接在命令行中通过gcc命令来编译源代码,不报错基本上就是没问题,再运行试试即可。

SSH使用config管理多个会话配置

参考:https://www.cnblogs.com/zhonghuasong/p/7236989.html最终效果图示如下:这种配置我在虚拟机(固定了IP)CentOS中还尚未成功配置好,每一次都还需要输入密码,原因还没找到,等找到了再把原因贴过来。原文如下:配置账号与密码大致的配置文件的路径为:
阅读更多

MongoDB原生脚本的CURD--官方文档阅读笔记

安装&登录

0、Windows下使用从MongoDB官网下载MSI安装文件,感觉比zip的安装包使用便捷。Ubuntu Linux下使用sudo apt install mongodb-server安装、其配置文件路径为/etc/mongodb.conf、可以通过在其中配置数据库路径。
在这里插入图片描述
Mac下使用brew install mongodb,其配置信息可参考如下:
在这里插入图片描述
1、mongod --bind_all 默认只能本机访问MongoDB、使用此选项可以让别的机器通过网络访问
2、如果不能访问,检查端口是否开放,默认为27017。AWS的EC2需要在入站规则中加入该端口才会生效。
3、使用mongo进入数据库后、创建用户与密码。

Mongo Shell

insert

1
2
3
4
5
6
7
8
9
10
db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>, //
ordered: <boolean> // 按顺序插入
}
)
db.inventory.insertOne(
{ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

save

Updates an existing document or inserts a new document, depending on its document parameter.

query

一般查询:

1
2
db.inventory.find( {} )
db.inventory.find( { status: "D" } )

使用查询操作符查询:
更多查询操作符:https://docs.mongodb.com/manual/reference/operator/query/

1
2
// 格式:{ <field1>: { <operator1>: <value1> }, ... }
db.inventory.find( { status: { $in: [ "A", "D" ] } } )

使用AND

1
2
// status==‘A’ && qty < 30
db.inventory.find( { status: "A", qty: { $lt: 30 } } )

使用OR

1
2
3
4
5
6
7
8
// status==‘A’ || qty < 30
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

// status=='A' && (qty < 30 || item like 'p%')
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )

正则表达式
详细可参考:https://docs.mongodb.com/manual/reference/operator/query/regex/

1
2
3
4
5
6
7
8
9
10
11
12
/* 格式:
{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }
-----
{ <field>: /pattern/<options> }
*/
----------------------------------------------------------
// 查询title以h开头的文档,options里面有i说明大小写不敏感
db.bizQuestion.find( {
title : {$regex : /^h/, $options:'i'}
} )

两种格式的使用场景存在差异,具体可参考上述链接:

1
{ name: { $in: [ /^acme/i, /^ack/ ] } } // 这里只能使用第二种格式

在这里插入图片描述
如果文档中的某个字段的值是文档

1
2
3
4
5
6
7
8
9
10
11
// 插入--注意size的结构
db.inventory.insertMany( [
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
// 接着上面的进行查询。
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } ) // OK
db.inventory.find( { size: { w: 21, h: 14, uom: "cm" } } ) // X, 注意顺序,这里匹配不到任何东西

执行效果如下:
在这里插入图片描述
如果只以size中的某一个字段为查询域

1
2
3
db.inventory.find( { "size.uom": "in" } )
db.inventory.find( { "size.h": { $lt: 15 } } )
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )

其中的字段还可以为一个数组,数组中的数据可以是一个简单的类型,如整数、字符串等,也可以还是一个文档。对于这些情况,其查询方式存在或多或少的差异,可以在需要的时候参考官方文档。

如何返回自己想要的字段

前面查询得到的结果都是全部的字段,如果不需要返回所有的字段,可以通过设置projection来达到目的,projection的解释:

A document given to a query that specifies which fields MongoDB returns in the result set.

其中还包括字段为数组以及数组中的字段为文档的多种情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 初始数据结构
db.inventory.insertMany( [
{ item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
{ item: "notebook", status: "A", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
{ item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
{ item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

// 返回结果显示item,status,不显示_id
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
// 如果字段的值也是一个文档
db.inventory.find(
{ status: "A" },
{ item: 1, status: 1, "size.uom": 1 }
)
// 字段为数组,数组的类型是文档
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )

update

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
db.books.update(
{ _id: 1 },
{
$inc: { stock: 5 },
$set: {
item: "ABC123",
"info.publisher": "2222",
tags: [ "software" ],
"ratings.1": { by: "xyz", rating: 3 }
}
}
)
-------------------------------------------------------------------
try {
db.restaurant.updateMany(
{ violations: { $gt: 4 } },
{ $set: { "Review" : true } }
);
} catch (e) {
print(e);
}
-------------------------------------------------------------------
// The following operation updates a single document where name: "Central Perk Cafe" with the violations field:

try {
db.restaurant.updateOne(
{ "name" : "Central Perk Cafe" },
{ $set: { "violations" : 3 } }
);
} catch (e) {
print(e);
}
-------------------------------------------------------------------
// The following operation attempts to update the document with name : "Pizza Rat's Pizzaria", while upsert: true :
// 对于这个upsert:true这个参数,update--insert。如果为true并且前面的query没有匹配到,则会进行插入,否则更新。
try {
db.restaurant.updateOne(
{ "name" : "Pizza Rat's Pizzaria" },
{ $set: {"_id" : 4, "violations" : 7, "borough" : "Manhattan" } },
{ upsert: true }
);
} catch (e) {
print(e);
}

Spring Data Mongo DB去掉插入的_class字段分析

大致的框架是从网上找来的资源。但是遇到了两个问题:运行代码后,MongoDB数据库没有收到改变。想起了在yaml中配置的mongodb参数,那些参数,data的上一层是spring,如下:spring boot在加载这些数据时,会得到一个MongoProperties。按住Ctrl,然后点在那些值上
阅读更多

CentOS7中Redis的安装与基本配置

安装

1
2
3
sudo yum install redis # 看yum源中是否有redis,我试的没有。不过应该是没有的,要从源码编译安装
sudo yum install epel-release # 下载fedora的epel库
sudo yum install redis # 再次安装

启动、关闭、连接

1
2
3
4
5
6
7
8
9
10
11
12
# 启动redis
service redis start
# 停止redis
service redis stop
# 查看redis运行状态
service redis status
# 查看redis进程
ps -ef | grep redis
# 进入本机redis
redis-cli
# 列出所有key
keys *

配置开机启动

1
2
# 设置redis为开机自动启动
chkconfig redis on

从防火墙开放端口

1
2
sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent # 开放6379端口
sudo firewall-cmd --reload # 重新加载配置

开启远程访问

默认是只能在本机访问、所以通过网络访问需要额外的配置。配置文件的目录在:/etc/redis.conf。然后分别修改下面两处配置:

这里写图片描述

这里写图片描述

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
import redis.clients.jedis.Jedis;

public class TestRedis {
public static void main(String[] args) {
Jedis redis = new Jedis("192.168.102.6");
System.out.println(redis.ping());
}
}
/* 输出:
* PONG
*
* Process finished with exit code 0
* /

参考:
https://www.cnblogs.com/rslai/p/8249812.html
https://blog.csdn.net/xujian_2001/article/details/78927706

nginx实现Tomcat的负载均衡集群

在Linux中安装时需要自行下载源代码、安装依赖,然后编译、安装。在macOS中,有一个简便的方式,那就是使用homebrew。在Linux中安装以及配置nginx的连接为:https://blog.csdn.net/asahinokawa/article/details/82288567。虽然用了
阅读更多

反向代理为什么叫反向代理

Nginx可以实现端口转发,这又叫反向代理。那么什么叫反向代理呢?一开始特别不理解,然后去找一些答案时,发现一个特别形象和容易懂的回答。来自知乎中对此问题的一个回答:https://www.zhihu.com/question/24723688

这里写图片描述

这里写图片描述

正向代理隐藏真实客户端,反向代理隐藏真实服务端

自己的理解:
正向代理就是我们平常使用的那种代理软件的效果,我们将自己的请求发给代理服务器,然后再由代理服务器发送给目标服务器;反向代理,顾名思义,方向相反,当代理服务器收到请求后,依照某种规则,转发给不同的服务器。因此,结合上面两幅生动形象、网友所给的图,可以非常容易理解为什么叫反向代理。