小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的?

如下

CREATE TABLE `p_app_station` (

`WX_APP_ID` varchar(20) NOT NULL,

`APP_SECRET` varchar(33) DEFAULT NULL,

`IS_BINDING` int(1) DEFAULT '0',

`ACCOUNT_ID` int(13) DEFAULT NULL,

`TOKEN` varchar(40) DEFAULT NULL,

`BIND_URL` varchar(200) DEFAULT NULL,

`WX_APP_NAME` varchar(50) DEFAULT NULL,

`WX_APP_SID` varchar(50) DEFAULT NULL,

`WX_NO` varchar(50) DEFAULT NULL,

`CREATE_USER_ID` varchar(13) DEFAULT NULL,

`UPDATE_DATE` datetime DEFAULT NULL,

`CREATE_DATE` datetime DEFAULT NULL,

`UPDATE_USER_ID` varchar(13) DEFAULT NULL,

`STATION_TYPE` int(1) unsigned zerofill DEFAULT NULL COMMENT '标记类型(试用版:0,会员版:1,定制版:2)',

`ACTIVE_DATE` datetime DEFAULT NULL COMMENT '使用时间截止',

`APP_MODULE_ID` varchar(60) DEFAULT NULL COMMENT '推送模版消息ID',

PRIMARY KEY (`WX_APP_ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

insert into p_app_station(wx_app_id) values('12121312312312啊啊啊啊啊aassasdasd');

select * from p_app_station where wx_app_id like '12121312312312%';

很明显varchar(20) 不足以容纳12121312312312啊啊啊啊啊aassasdasd

查询结果如下

确实自动截断了,但是在项目中执行同样的sql发现并非如此,反而报错。

Data truncated for column '%s' at row %ld

考虑到是同一个数据库,不存在模式不同,那么可能性应该出现在jdbcDriver上。

查看jdbc源码

private void setupServerForTruncationChecks() throws SQLException {

if (getJdbcCompliantTruncation()) {

if (versionMeetsMinimum(5, 0, 2)) {

String currentSqlMode = this.serverVariables.get("sql_mode");

boolean strictTransTablesIsSet = StringUtils.indexOfIgnoreCase(currentSqlMode, "STRICT_TRANS_TABLES") != -1;

if (currentSqlMode == null || currentSqlMode.length() == 0 || !strictTransTablesIsSet) {

StringBuilder commandBuf = new StringBuilder("SET sql_mode='");

if (currentSqlMode != null && currentSqlMode.length() > 0) {

commandBuf.append(currentSqlMode);

commandBuf.append(",");

}

commandBuf.append("STRICT_TRANS_TABLES'");

execSQL(null, commandBuf.toString(), -1, null, DEFAULT_RESULT_SET_TYPE, DEFAULT_RESULT_SET_CONCURRENCY, false, this.database, null, false);

setJdbcCompliantTruncation(false); // server's handling this for us now

} else if (strictTransTablesIsSet) {

// We didn't set it, but someone did, so we piggy back on it

setJdbcCompliantTruncation(false); // server's handling this for us now

}

}

}

}

查看getJdbcCompliantTruncation方法,其默认值为

private BooleanConnectionProperty jdbcCompliantTruncation = new BooleanConnectionProperty("jdbcCompliantTruncation", true,

Messages.getString("ConnectionProperties.jdbcCompliantTruncation"), "3.1.2", MISC_CATEGORY, Integer.MIN_VALUE);

因此从3.1.2版本在jdbcurl中如果没有设置jdbcCompliantTruncation那么默认将会执行不截断并且报错。

那么加上参数是否可以呢?

取舍一下:

如果截断当出现比超长可能会有精度丢失的风险。

因此建议还是在程序中检查。

目前正在做关于使用hibernate validate的相关。

mysql 配置自动截断_MySql超长自动截断相关推荐

  1. mysql 配置自动截断_MySql超长自动截断实例详解

    MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...

  2. mysql 超长 java 问题_MySql超长自动截断实例详解

    MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...

  3. mysql 设置事物自动提交_mysql事务自动提交的问题

    1:mysql的aut0commit配置默认是开启的,也就是没执行一条sql都会提交一次,就算显示的开启事务也会导致多条SQL不在一个事务中, 如果需要相关的SQL在同一个事务中执行,那么必须将aut ...

  4. mysql workbench自动备份_MySQL如何自动备份

    MySQL Hi-程序员们,大家好啊-好久不见了,有没有想我呀- 各位知道,MySQL是一款十分好用且强大的数据库软件,最最关键的是,它免费!免费!免费!MySQL自己所提供的管理控制程序" ...

  5. mysql 自动增量_MySQL重置自动增量值

    在本教程中,我们将向您展示如何重置MySQL中AUTO_INCREMENT列的自动增量值. MySQL提供了一个有用的功能,称为自动增量. 您可以将自动递增属性分配给表的列,以生成新行的唯一标识. 通 ...

  6. MySQL配置日志服务器_mysql配置数据库日志

    mysql配置数据库日志 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Servi ...

  7. mysql定时增量备份_Mysql日常自动备份和增量备份脚本

    序 你是否在寻找一个MySQL备份脚本? 适合对象 本文是在Linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本. 本文适合于没有启动复制功能 ...

  8. mysql 单向自动同步_mysql单向自动同步

    mysql自动同步 以下教程均使用mysql自带的自动同步功能 全库单向自动同步 本例把192.168.3.45上名称为ewater_main的数据库自动同步到192.168.3.68的ewater_ ...

  9. mysql备份脚本+关_mysql数据库自动定期备份的脚本

    mysql数据库自动定期备份的脚本 说明: 保留每天备份的数据是件不太现实的事,做好的做法是保留前三天的 备份数据.把备份的数据打包并压缩,文件名以系统时间命名,打包后的 备份文件放在一个特定的文件夹 ...

最新文章

  1. 014、Linux下vim搜索与替换
  2. 用python实现:找出1到101 之间的质数
  3. unity and MySql
  4. 史上最全java架构师技能图谱(上)
  5. hadooppythonsql_python - hadoop,mapreduce demo
  6. java spring bean配置文件_Spring基于xml文件配置Bean过程详解
  7. 9:23 2009-7-23
  8. 解决mysql不是内部或外部命令
  9. JSON解析中获取不存在的key
  10. 计算机学科专业基础综合961,2017年北京航空航天大学计算机学院961计算机学科专业基础综合之数据结构考研强化模拟题...
  11. 系统地址和服务器地址不一致,在打开远程通服务配置程序时检测系统配置时提示配置失败,映射的ip地址与服务器不一致。...
  12. Android 自定义View -- 简约的折线图
  13. Flutter之GlobalKey详解
  14. Windows服务器配置fileZilla Server
  15. Matlab学习10-图像处理之傅里叶变换
  16. CSDN2018博客之星评选结果预测第二弹
  17. 基于Python飞机票销售系统 毕业设计-附源码141432
  18. Flutter 启动白屏
  19. python取随机小数_python生成2位小数点的随机数
  20. 张量分解和应用(1)

热门文章

  1. 狂神学习系列14:SpringCloud
  2. Azure Synapse Analytics (Azure SQL DW)性能优化指南(4)——使用结果集缓存优化性能
  3. rospy.init_node(‘talker_node‘, anonymous=True)中anonymous意思
  4. react学习—ref Hook
  5. java程序员培训学习需要多长时间
  6. 微服系列之Feign使用HttpClient和OkHttp网络请求框架
  7. S7-200SMART PLC中书签和交叉引用的具体使用方法示例
  8. 零基础HTML入门教程(11)——换行br
  9. 关于Scanner一些用法
  10. c++ typeid和type_index