文档章节

MySql超长自动截断

Mr_Qi
 Mr_Qi
发布于 2017/06/01 10:23
字数 498
阅读 228
收藏 2
点赞 0
评论 0

小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在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的相关。

© 著作权归作者所有

共有 人打赏支持
Mr_Qi
粉丝 251
博文 298
码字总数 312931
作品 0
南京
程序员
mysql load或者mysqlimpoort 数据,txt格式,如何跳过数据格式错误的行?

大家好,最近使用mysql导入txt文件到数据库中,但是发现使用mysqlimport导入数据的时候,txt中某行某个字段超长,只是发生警报,而且数据被截断导入到库了。这种情况,怎么设置跳过这样一行?...

charles1991 ⋅ 2015/10/20 ⋅ 2

perl 格式化输出能自适应变长字符串么?

使用format输出,字符串长度超过预设时会被截断。有办法能让超长字符串自动换行方法么?或者只能预先计算字符串长度,动态创建format

jianblog ⋅ 2013/07/03 ⋅ 0

Css 常用样式

table(td) 不自动换行,超长自动截断用...代替显示

JUKE ⋅ 2016/12/10 ⋅ 0

mysql由于字段太长插入时截断插入但java后台却报错

LengF:在看《PHP高级漏洞审核技术》认真的看了这两点,暂且记下。 对于很多web应用文件在很多功能是不容许重复数据的,比如用户注册功能等。一般的应用程序对于提交注册的username和数据库里...

BabyMason ⋅ 2015/01/12 ⋅ 0

Chrome Dev更新,新Logo来了!

Chrome Dev 分支今日面向全平台更新到了 11.0.696.12,本次更新修复了若干 Bug,主要修复的 Bug 如下: Chrome Dev上的“纽约时报”应用程序崩溃; 同步登录界面被截断,显示不完整; 当鼠标...

老枪 ⋅ 2011/03/17 ⋅ 5

文件上传-文件名长度绕过白名单限制

  在实际渗透中,当我们发现有文件上传的地方时,我们会尽可能地尝试所有的办法进行webshell的上传,只要能上传webshell,就说明本次渗透至少成功了一般,后续就看获得的webshell的权限情况...

eth10 ⋅ 04/15 ⋅ 0

mysql_数据库设计类型选择及优化

数据库设计原则: a,更小的通常更好。 应该尽量使用可以正确存储数据的最小数据类型。如只要存储0-200,tinyint unsigned更好 b,简单就好 简单的数据类型的操作需要更少的cpu周期。同时后期...

skanda ⋅ 2015/03/13 ⋅ 0

PHP脚本审计(二)

2) mt_srand()/srand()-weak seeding(by Stefan Esser) 看php手册里的描述: mtsrand (PHP 3>=3.0.6, PHP 4, PHP 5) mtsrand --播下一个更好的随机数发生器种子 说明 void mt_srand (int s......

wsj234 ⋅ 2014/04/27 ⋅ 0

关于mysql 出现 1264 Out of range value for column 错误的解决办法

原因: 新版本的MySQL对字段的严格检查。 通常在Linux下安装完mysql后,默认的sql_mode值是空,在这种情形下mysql执行的是一种不严格的检查,如果要插入的字段长度超过列定义的长度,那么mys...

phpervip ⋅ 2017/10/13 ⋅ 0

解决 ASP.NET Core MySql varchar 字符串截取(长度 255)

ASP.NET Core 中使用 MySql,如果字段类型为,不管设置多少长度,插入或更新数据的时候,会自动截断(截取 255 长度的字符)。 出现问题的原因,就是使用了程序包(我使用的版本是),可能是...

那谁爸爸 ⋅ 01/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

收集自网络的wordpress 分页导航的代码教程(全网最全版)

wordpress 分页导航是用来切换文章的一个功能,添加了 wordpress 分页导航后,用户即可自由到达指定的页面数浏览分类文章,而这样的一个很简单功能却有很多朋友在用插件:WP-PageNavi,插件的...

Rhymo-Wu ⋅ 35分钟前 ⋅ 0

微服务 WildFly Swarm 入门

Hello World 就像前面章节中的其他框架一样,我们希望添加一些基本的 Hello-world 功能,然后在其上逐步添加更多的功能。让我们从在我们的项目中创建一个 HolaResources 开始。您可以使用您的...

woshixin ⋅ 42分钟前 ⋅ 0

Maven的安装和Eclipse的配置

1. 下载Maven 下载地址 2. 解压压缩包,放到自己习惯的硬盘中 此处我将其放到了 D:\Tools 目录下。 3. 配置环境变量 右键此电脑 -> 属性 -> 高级系统设置 -> 环境变量。 在系统变量中新建,变...

影狼 ⋅ 49分钟前 ⋅ 0

python pip使用国内镜像的方法

国内源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://......

良言 ⋅ 50分钟前 ⋅ 0

对于url变化的spa应该如何使用微信jssdk

使用vue单页面碰上微信jssdk config验证失败的坑。第一次成功 之后切换页面全部失败,找到了解决方法,第一次验证成功后保存验证信息 切换页面时验证信息直接拿来用,加一个wx.error() 失败时...

孙冠峰 ⋅ 54分钟前 ⋅ 0

Spring Cloud Gateway 一般集成

SCF发布,带来很多新东西,不过少了点教程,打开方式又和以前的不一样,比如这个SCG,压根就没有入门指导,所以这里写一个,以备后用。 一、集成 pom.xml <dependency> <groupI...

kut ⋅ 58分钟前 ⋅ 0

建造模式

《JAVA与模式》之建造模式

Cobbage ⋅ 今天 ⋅ 0

WePY框架开发的小程序如何在微信web开发者工具中运行起来

一、首先需要安装node.js,安装步骤如下: 首先下载安装包 https://nodejs.org/en/download/ 点击下载相应的zip版本 然后将文件夹解压到任意目录 比如我这里解压到了:C:\Program Files\node...

Helios51 ⋅ 今天 ⋅ 0

使用EnumSet 代替位域(32)

1、位域(Bit field):使用or 运算将几个常量合并到一个集合中 位操作,可以有效地执行 AND 、OR 这样的位操作 但是 位域比int 常量枚举缺点更多 2、java.util 包里面的EnumSet 类是有效的替...

职业搬砖20年 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部