MySql超长自动截断实例详解

小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在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 截断的讲解,大家如有疑问可以留言或者到本站社区交流讨论,共同进步, 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:mysql5.7.19 winx64解压缩版安装配置教程

centos6.4下mysql5.7.18安装配置方法图文教程

MySQL5.7.18下载和安装过程图文详解

MySql中使用正则表达式查询的方法

php检测mysql表是否存在的方法小结

mysql 配置自动截断_MySql超长自动截断实例详解相关推荐

  1. mysql数据表操作_MySQL数据表基本操作实例详解

    本文实例讲述了MySQL数据表基本操作.分享给大家供大家参考,具体如下: 数据表的基本操作 1.主键约束要求主键列的数据唯一,并且不允许为空.主键能够唯一地识别表中的一条记录,可以结合外键来定义不同数 ...

  2. mysql简易购物车系统_基于PHP+Mysql简单实现了图书购物车系统的实例详解

    基于PHP+Mysql简单实现了图书购物车系统的实例详解,购物车,这是,页面,简单,图书 基于PHP+Mysql简单实现了图书购物车系统的实例详解 易采站长站,站长之家为您整理了基于PHP+Mysql ...

  3. mysql数据存储过程详解_mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...

  4. Linux如何全盘搜索MySQL文件_Linux上的文件搜索命令实例详解

    locate 基础了解 locate命令搜索的后台数据库路径:/var/lib/mlocate/mlocate.db ls -hl /var/lib/mlocate total 1.2M -rw-r- ...

  5. mysql数据库杀掉堵塞_Mysql解决USE DB堵塞详解

    遇到故障,我们往往想的是如何解决这个故障,而不是从故障的根本去思考出现这个故障的原因?这样的结果,只能使我们得到了鱼,失去了渔.今天,我们就来分享一个由USE DB堵塞故障引发的思考案例. 故障描述 ...

  6. mysql 配置自动截断_MySql超长自动截断

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

  7. mysql的存储过程原理_mysql存储过程原理与用法详解

    本文实例讲述了Mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018- ...

  8. mysql 秒杀 隔离级别_MySQL 四种隔离级别详解,看完吊打面试官

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  9. mysql 二叉树表设计_Mysql 索引模型 B+ 树详解

    一.认识二叉树 首先,在了解 mysql 中的 B+ 树之前,我们需要搞懂什么是二叉树.二叉树是一种常见的非线形数据结构,数据是以一对多的形态组织起来的,我画了一张图来帮助你理解: 在二叉树中,有一种 ...

最新文章

  1. 小分子溶液当硬盘!布朗大学逆天研究:用代谢分子存储照片,准确率达99%
  2. Arrays.asList(arr)使用注意事项
  3. ora-24811提供写入的数据少于指定的数据_C++开源、高性能时序数据库pinusdb
  4. 【详细解析】7-1 两个有序序列的中位数 (25 分)
  5. pom.xml详细说明
  6. C语言结构体描述BMP的文件格式
  7. 信息学奥赛一本通 1172:求10000以内n的阶乘 | OpenJudge NOI 1.6 14:求10000以内n的阶乘
  8. 信息学奥赛一本通 2032:【例4.18】分解质因数
  9. Criteo公司在上海新开通一个数据中心
  10. 进击webpack4 (基础篇:配置 一)
  11. C#一个方法返回多个值
  12. leetcode-155-最小栈
  13. 5G SA信令流程介绍
  14. Jeff Dean 光辉事迹
  15. hadoop 查看文件大小以及文件数
  16. git常用命令(持续更新)
  17. 探讨一种新型的双进程守护应用保活
  18. linux使用单核_如何使用Linux还原单核计算机
  19. 初中英语语法(016)-被动语态
  20. 学计算机的自述,计算机的自述作文范文

热门文章

  1. 深度deepin安装apache tomcat
  2. CentOS6.5安装Tab增强版:bash-completion
  3. Java 程序性能优化《第一章》Java性能调优概述 1.4小结
  4. 《微软的软件测试之道》读书笔记 之 结构测试技术
  5. 大学计算机课的学后感,大学课程学习心得体会感想
  6. PTA-6-3 使用函数的选择法排序 (25分)(C语言)
  7. matlab实验题目,MATLAB实验题目
  8. 信息学奥赛一本通 1140:验证子串 | OpenJudge NOI 1.7 18
  9. 信息学奥赛一本通 1119:矩阵交换行 | OpenJudge NOI 1.8 01 矩阵交换行
  10. 线性代数 —— 矩阵快速幂