这篇文章主要介绍了MySql超长自动截断实例详解的相关资料,这里通过实例来说明如何实现自动截断的功能,需要的朋友可以参考下

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 自动截断_MySql中关于超长自动截断的案例详解相关推荐

  1. mysql去重函数的使用方法_MySQL中使用去重distinct方法的示例详解

    一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而 ...

  2. mysql添加新的实例_MySQL中添加新用户权限的实例详解

    有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表.比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些. 下面的例子显示出如何使用MySQL客户安装新用户. ...

  3. mysql installer安装_MySQL Installer 8.0.21安装教程图文详解

    1. 缘由 刚好需要在新系统上重新安装MySQL,便写了一份的下载安装教程,供查阅,以防日后细节有所遗忘. 2. 版本说明 MySQL Installer 8.0.21 3. 下载安装包 方式一:官网 ...

  4. mysql 1061原因_MySQL死锁问题分析及解决方法实例详解(转)

    出处:http://www.jb51.net/article/51508.htm MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1.MySQL常用存储 ...

  5. mysql数据类型设计说明_MySQL的数据类型和建库策略分析详解

    MySQL的数据类型和建库策略分析详解 更新时间:2008年04月06日 01:16:47   作者: 无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构.充分利用空间是十分必要的 ...

  6. Docker高级篇之Mysql主从复制、Redis集群扩容缩容配置案例详解

    Docker之Mysql主从复制.Redis集群扩容缩容配置案例 1. 安装mysql主从复制 1.1 新建主服务器容器实例3307 1.2 进入/mydata/mysql-master/conf目录 ...

  7. mysql 特殊函数_MySQL中sleep函数的特殊现象示例详解

    前言 MySQL中的系统函数sleep,实际应用的场景不多,一般用来做实验测试,昨天在测试的时候,意外发现sleep函数的一个特殊现象.如果在查询语句中使用sleep函数,那么休眠的时间跟返回的记录有 ...

  8. mysql sleep详解_MySQL中sleep函数的特殊现象示例详解

    前言 MySQL中的系统函数sleep,实际应用的场景不多,一般用来做实验测试,昨天在测试的时候,意外发现sleep函数的一个特殊现象.如果在查询语句中使用sleep函数,那么休眠的时间跟返回的记录有 ...

  9. mysql 外键详解_mysql 中的外键key值的详解

    如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列 2. 如果Key是PRI,  那么该列是主键的组成部分 3. 如果Key是UNI,  那么该列是一 ...

最新文章

  1. 交易平台基本密钥处理流程(SJL05加密机)
  2. Eclipse 搭建Android开发环境(整理)
  3. Angular DefaultDomRenderer2.setProperty - HTML的值是如何从Angular Component flow过来的,以及跨平台支持
  4. JS 常用函数一(弹对话框、操作HTML元素、写HTML文档、写到控制台、查找元素、元素插入内容、改变HTML属性、计时)
  5. 漫步线性代数二十——快速傅里叶变换(下)
  6. 天猫双11:1日到11日0点45分 382个品牌成交额超过1亿元
  7. 随手记:Ubuntu16.04.1安装Chrome浏览器以及解决root下无法启动的问题
  8. 【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制
  9. Unity 设置固定移动路线
  10. xtu 1369 Black White Chess
  11. KY RD9700_USB网卡驱动
  12. www.etiger.vip DEVC++练习(入门)
  13. case when 语句用法
  14. 计算机考研815指什么,考研815化学包括什么
  15. 酷派大观4 8970 刷android 4.4,极速达百兆! 移动4G版酷派大观4网络体验
  16. 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发
  17. Linux 机器重启reboot命令
  18. 靶机18 driftingblues1
  19. CRMEB-知识付费系统程序配置之直播配置(方法二下)
  20. 我们能做出量子计算机却至今摸不透量子力学,我们能做出量子计算机 却至今摸不透量子力学...

热门文章

  1. css 设置行内元素顶部对齐
  2. Redis_数据类型(常用)
  3. 计算机启动时滴滴两声,电脑开机时出现滴滴两声后,不能开机,怎么回事。
  4. 知乎上演的“变形计“,资本市场会打几分?
  5. Python判断一个正整数是否为素数的算法
  6. python根据四点坐标截取图片
  7. 世界在变化刷脸支付一直奋进
  8. 中国佛学66句震撼世界的禅语(转贴)
  9. 浅谈矩阵加速——以时间复杂度为O(log n)的算法实现裴波那契数列第n项及前n之和使用矩阵加速法的优化求法
  10. “重塑安全边界,揭秘零信任业务保障”,联软科技下一代零信任访问管理系统发布