今天在mybatis中写了一段 mysql 用于计算累加,结果发现在数据库管理工具上直接执行正常的语句到了程序中,直接出不了数了。一开始我怀疑是不是mybatis(我用的版本是3)不支持 mysql 的自定义变量的,所以一直在查相应的解决方法。但是!
一开始我方向就错了,mybatis 是支持 自定义变量的,问题出在 字符集上,因为我传入的参数有些是中文,而我在数据库链接又没有设置好字符集,所以导致每次都查不到数据。
<select id="getData" parameterType="map" resultType="java.util.Map">
<![CDATA[
select concat(ta.time, ':00') as time,ta.aaa,ta.bbb,(@curVal := @curVal + ta.aaa- ta.bbb) as sum
from (select cc.time, SUM(cc.aaa) as aaa, SUM(cc.bbb) as bbb
from table_${table} cc
where
cc.code= #{code}
and cc.date= #{date}
group by cc.time
) ta ,(select @curVal:=0.00) r
]]>
</select>
在编写数据库信息的时候要把字符集的参数带上,并且以 & 号隔开
spring.datasource.url=jdbc:mysql://xxxx.xxxx:3306/database?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=xxxx
spring.datasource.password=xxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver