mysql超长自动截断的详细解决方案
同伴问了一个问题:为什么能长字不能自动截断而打电话或在项目更新语句,它可以自动在Navicat切断
如下
创建表(` p_app_station `
` wx_app_id ` varchar(20)不为空,
` app_secret ` varchar(33)默认为空,
` is_binding ` int(1)默认'0',
` account_id ` int(13)默认为空,
`令牌` varchar(40)默认为空,
` bind_url ` varchar(200)默认为空,
` wx_app_name ` varchar(50)默认为空,
` wx_app_sid ` varchar(50)默认为空,
` wx_no ` varchar(50)默认为空,
` create_user_id ` varchar(13)默认为空,
` update_date ` DateTime字段,
` create_date ` DateTime字段,
` update_user_id ` varchar(13)默认为空,
` station_type ` int(1)符号补零默认为空评论标签类型(试用版:0、会员版:1,定制版本:2),
` active_date ` DateTime字段注释使用时间截止,
` app_module_id ` varchar(60)默认为空的评论推模板消息ID,
主键(` wx_app_id `)
InnoDB引擎=默认的字符集utf8)
插入p_app_station(wx_app_id)值('12121312312312啊啊啊啊啊啊啊啊啊啊啊啊aassasdasd);
SELECT * FROM p_app_station哪里wx_app_id像'12121312312312 %;
很明显,varchar(20)是不足以容纳12121312312312啊啊啊啊啊啊啊啊啊啊啊啊,啊aassasdasd
查询结果如下
它确实是自动截断的,但在项目中并不是相同的SQL发现。Instead, it was wrong.
数据截断为列''%1 s'at行%ld
考虑到这是一个数据库,有没有不同的模式,那么可能应该出现在jdbcdriver。
看看JDBC源代码
private void setupserverfortruncationchecks()抛出SQLException {
如果(getjdbccomplianttruncation()){
如果(versionmeetsminimum(5, 0, 2)){
字符串currentsqlmode = this.servervariables.get(sql_mode );
布尔stricttranstablesisset = stringutils.indexofignorecase(currentsqlmode,strict_trans_tables )!= 1;
如果(currentsqlmode空currentsqlmode。长度)| |(= = = = 0 { stricttranstablesisset | |!)
StringBuilder commandbuf =新的StringBuilder(设置sql_mode =);
如果(currentsqlmode!= null currentsqlmode.length()> 0){
commandbuf.append(currentsqlmode);
commandbuf.append(
}
commandbuf.append(strict_trans_tables);
execsql(null,commandbuf.tostring(),1,零,default_result_set_type,default_result_set_concurrency,虚假,this.database,空、假);
setjdbccomplianttruncation(假); / /服务器的处理,这对我们现在
如果(stricttranstablesisset){ }
没有设置我们,但有人这样做了,所以我们背上它。
setjdbccomplianttruncation(假); / /服务器的处理,这对我们现在
}
}
}
}
看getjdbccomplianttruncation方法,其默认值为
私人booleanconnectionproperty jdbccomplianttruncation =新booleanconnectionproperty(jdbccomplianttruncation
Messages.getString(connectionproperties。jdbccomplianttruncation ,3.1.2 )
因此,如果3.1.2版本不在jdbcurl设置jdbccomplianttruncation,默认将违约和虚假。
那么有可能添加参数吗
放弃.
如果截断时间较长,则可能损失精度损失的风险。
因此,建议在程序中对其进行检查。
现在正在做关于使用Hibernate验证的工作。
以上是关于MySQL截断的解释。如果你有问题,你可以留言或与当地社区讨论,共同进步。谢谢你的阅读。我们希望能帮助你。感谢您对本站的支持。