精华内容
下载资源
问答
  • 问题:在使用Java的jdbc读取tinyint(1)类型的数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢? 所以,JAVA数据类型 和 MYSQL的数据类型...

    一、问题描述

    问题:在使用Java的jdbc读取tinyint(1)类型的数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢?

    所以,JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。

    二、原因分析

    MYSQL官方的JDBC文档定义转换规则如下:

    官方文档地址:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.html

    MySQL Types to Java Types for ResultSet.getObject():
    java.lang.Boolean if the configuration property tinyInt1isBit is set to true(the default) and the storage size is 1, or java.lang.Integer if not.

    翻译:

    如果tinyInt1isBit =true(默认),且tinyInt存储长度为1 ,则转为java.lang.Boolean;否则转为java.lang.Integer。
    注: 是ResultSet.getObject() 方法

    三、解决方法

    1、tinyInt(1) 只用来代表Boolean含义的字段,且0代表False,1代表True。如果要存储多个数值,则定义为tinyInt(N), N>1。例如 tinyInt(2)。

    2、JDBC的URL增加 tinyInt1isBit=false参数,注意参数名区分大小写,否则不生效:

    jdbc:mysql://localhost:3306/test?tinyInt1isBit=false

    相关文章:

    【1】 https://blog.csdn.net/dujianxiong/article/details/60571395

    【2】 https://blog.csdn.net/codolio/article/details/6591493

    展开全文
  • 查询时,该字段对应的Java类型为Boolean源数据:读取后数据:问题分析MySQL官方的JDBC文档定义转换规则如下:如果tinyInt1isBit=true(默认),且tinyInt存储长度为1,则转为java.lang.Boolean,否则转为java.lang....

    问题描述

    tinyInt 的数据类型,在JAVA数据类型 和 MySQL的数据类型转换,要注意存储长度为 1 的情况。查询时,该字段对应的Java类型为Boolean

    源数据:

    3c6bf548dddbf00ee5aa664ed45db757.png

    读取后数据:

    0f4cef7e06160f522ee4f93993638993.png

    问题分析

    MySQL官方的JDBC文档定义转换规则如下:

    ad53665d576070dde08515243a954748.png

    如果tinyInt1isBit=true(默认),且tinyInt存储长度为1,则转为java.lang.Boolean,否则转为java.lang.Integer。

    解决方案

    1、避免使用长度为 1 的 tinyint 类型字段存储数字格式的数据,tinyInt(1) 只用来代表Boolean含义的字段。其中 0 代表False,1 代表True。如果要存储多个数值,则定义为tinyInt(N), N>1。例如 tinyInt(2)

    2、JDBC的URL增加 tinyInt1isBit=false参数,注意参数名区分大小写,否则不生效。

    final private val URL = "jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useSSL=true"

    conn_str="jdbc:mysql://${hostname}/${db_name}?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useSSL=true&dontTrackOpenResources=true&defaultFetchSize=10000&useCursorFetch=true"

    Amazing MySQL !~~

    展开全文
  • 就是8位,只能存储2^8个数字,也就是256个数字,在mysql实现中,有符号是-128-127,无符号是0-255tinyint后面的括号带的数字,以后称之为M,和存贮的值没有任何关系,只是在某些情况下和显示的宽度有关系1. 常规测试使用基本...

    tinyint存储只是用一个字节,就是8位,只能存储2^8个数字,也就是256个数字,在mysql实现中,有符号是-128-127,无符号是0-255

    tinyint后面的括号带的数字,以后称之为M,和存贮的值没有任何关系,只是在某些情况下和显示的宽度有关系

    1. 常规测试

    使用基本的表,插入基本的数据

    f1d42cb06bbdad413623a722f564b179.png

    查询后发现没有任何区别

    bc998f5bdb2ebc3da2440019bc198746.png

    2. 无符号建表,同时zerofill

    建表的基本语句是

    4daf0f057eb8e84953805ab11c9b711d.png

    最后查询结果如下,比较明显

    bb90b08f917024ab9af463062000fe7e.png

    zerofill的整数字段必须无符号,这里可以看出M显示出了特定的宽度,不够的时候会填充0,多余了不作处理

    官方文档的解释是,5.7英文版

    这里摘抄其中重要的一段

    MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.)

    The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.

    When used in conjunction with the optional (nonstandard) attribute ZEROFILL, the default padding of spaces is replaced with zeros. For example, for a column declared as INT(4) ZEROFILL, a value of 5 is retrieved as 0005.

    至此,也验证了我们的结论.

    绝对和存储的值没有关系

    mysql的console中也会忽略这些

    无符号和zerofill的时候会填充0,显示成M对应的宽度

    整数类型都一样,有默认的显示宽度

    M作为元数据存储,推荐是显示的宽度,但是最终的解释权归程序所有

    最后,我给出了我的建议,那就是M其实没用,tinyint默认是4,其余的也有默认值,以后程序开发中,涉及整形数字的M时,可以不必纠结,直接忽略,最后使用数据库默认的M值即可

    展开全文
  • 问题:int(1) 和 tinyint(1) 有什么区别呢?查了下mysql中设置了储存类型后,储存是定长的,也就是说,int(1) 和 int(4) 在硬盘中所占的字节数都是一样的。int类型占4个字节,tinyint1个字节。int(1) 和 int(4)从...

    问题:int(1) 和 tinyint(1) 有什么区别呢?

    查了下mysql中设置了储存类型后,储存是定长的,也就是说,int(1) 和 int(4) 在硬盘中所占的字节数都是一样的。

    int类型占4个字节,tinyint占1个字节。int(1) 和 int(4) 从本身长度还是存储方式上都是一样的,区别就是显示的长度不同。

    int(1) 和 tinyint(1) ,在设计数据库的时候应该选择tinyint(1)。所占的储存空间越少越好,当然要够用才行。像储存一个个位数的字段,还是用tinyint(1)的好。

    总结:

    1.规定类型之后,存储是定长的,int(1)和int(4)从本身长度还是存储方式上都是一样的。mysql里,int(1)和int(4)的区别就是显示的长度,但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,如2 int(3)指定后就会显示为002

    2.int 存储占4个字节, tinyint   存储占1个字节,存储长度决定了他们表示的数字范围不同。int表示的数字范围是:从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。tinyint 表示的范围是0-255之间的数字。

    3.tinyint(1),和tinyint(3)没什么区别,存123都能存的下,而如果tinyint(3) zerofill 的话,插入值 12,会存储012,zerofill自动左边补零,这才是限制显示长度。

    精简总结:

    tinyint(1)  和 tinyint(3) 没什么区别,占用字节都是一位,存储范围都是一样的

    tinyint(3) zerofill ,当插入的数据少于3位的时候,左边自动补零,这才是限制显示长度

    int(1) 和 tinyint(1) ,够用的情况下,优先选择tinyint(1),因为占字节少、节省空间。

    tinyint一个字节   smallint  两个字节   MEDIUMINT三个字节  int 4个字节  BIGINT 8个字节。

    喜欢 (0)or分享 (0)

    展开全文
  • INT(1)和TINYINT(1)不会影响存储。TINYINT占用1字节,这意味着它的范围是-128到+127,而int占用4个字节;它的范围是-2147483648至+2147483647要了解宽度显示,让我们创建一个表格-mysql>createtableintAndTinyint...
  • `xxx_detail` `delflag` int(1) NOT NULL DEFAULT '0' COMMENT '删除标志',`xxx_category` `delflag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标记',问题:int(1) 和 tinyint(1) 有什么区别呢?像这样的...
  • What I tested so far (without result): upgrade/downgrade the MySQL connector added tinyInt1isBit= as the end of my connection string upgrade/downgrade the MySQL DB, always with the same data dump I ...
  • 前言: 因为做数据质量,校验mysql到hive的同步的数据质量。 是否字段一致发现的问题。 mysql中tinyint(1)会自动取出object 会算作true 或者false。
  • 直到再后来又和同事聊状态位字段应该用什么字段类型及长度存储的时候,我说用tinyint(1)来存储,有符号tinyint可以存储数值最大是127,然而后边的长度1就是限定只能存储1位,也就是0-9 。而且,当年说这番话的时候我...
  • Tinyint占用1字节的存储空间,即8位(bit)。那么Tinyint的取值范围怎么来的呢?我们先看无符号的情况。无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint的最小值为0.无符号的最大值即全部...
  • Mysql 中tinyint(1)类型false和true的说明

    千次阅读 2021-01-21 15:10:11
    MySQL 存储 Boolean 值的类型为 tinyint(1) 类型;MySQL 中有 true、false、TRUE、FALSE 四个常量,代表1、0、1、0 mysql> select true,false,TRUE,FALSE; +------+-------+------+-------+ | TRUE | FALSE | ...
  • tinyint(1)和tinyint(4)在mybatis中的区别 首先,tinyint在mysql中只占1byte,有符号的范围(-128,127),无符号的范围(0,255)。 这里主要介绍tinyint在mybatis中的映射问题,tinyint在mybatis中映射关系为: mysql `...
  • 从Sqoop导入MySQL导入TINYINT(1)类型数据到hive(tinyint),数据为null 问题原因 Sqoop在抽取数据到Hive或者HDFS时,会自动将类型为Tinyint(1)的列转为boolean类型,这就是导致抽取到Hive或HDFS中的数据中只有0和1...
  • `relation_type` tinyint(1) DEFAULT NULL COMMENT '关联类型' 存储的数字范围是:-128 - 127。 指定符号类型的情况,比如: `relation_type` tinyint(1) unsigned DEFAULT NULL COMMENT '关联类型' 存储的...
  • https://my.oschina.net/mui/blog/3017923tinyint长度只是为了补0java 对应 byte 类型, 取值范围 -128~127,无符:0~255在 set 方法赋值的时,用 byte 要强转一下,(所以还是用 int 或 integer 吧 ?)SQL ...
  • 原因:应该是mysql的导出Jar会默认将tinyint(1)转换为boolean 解决办法: (1)数据库改为tinyint(4),tinyint(4)就会默认转成数字,es的mapping用byte就能接受 (2)连接数据库的url中添加&TreatTinyAsBoolean=...
  • 场景:字段:status (值为1,2,3)类型:tinyint 长度:1(有符号的)结果:查询出来的数据列表,状态值不管是1还是2还是3,都是"boolean true"分析并解决:分析:由于MySql中没有boolean类型,所以会用到tinyint[1]类型...
  • 在查询数据的时候发现gender字段应该显示1,2,3,4这样的数字,但是查出来却是true或false这样的boolean类型。 不免产生疑问,为何education字段也是存的数字,就能正确显示出数字,而gender不行,我又查看字段,发现...
  • 我假设INT(1)与TINYINT(1)完全相同,但我真的不知道。 每当我的值只能是一个整数(例如0-9值)时,我总是只使用INT(1)来表示它是一个整数,并且只会是一个字符,我认为这意味着 它只能是0到9的值(如果我输入错了,请向...
  • mysql int(1) tinyint(1)有什么区别?我指定了字段长度,类型还有意义吗?Reply:mysql 中int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度,只有字段指定zerofill是有用如int(3),如果实际值是2,如果列指定...
  • TINYINT(1)详解

    2021-04-21 08:49:34
    stock_number tinyint(1)   如果stock_number此时的值是127,当库存+1的时候,就会超过int的最大范围(error: Data truncation: Out of range value for column 'stock_total' at row 1)类型         最小值 ...
  • flink关联mysql维表字段由tinyint变成boolean jdbc连接加上如下参数 &tinyInt1isBit=false&transformedBitIsBoolean=false 问题解决
  • 我指定了字段长度,类型还有意义吗?Reply:mysql 中int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度,只有字段指定zerofill是有用如int(3),如果实际值...
  • MySQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),MySQL里有四个常量:true,false,TRUE,FALSE,它们分别代表1,0,1,0,mysql> select true,false,TRUE,FALSE;+------+-------+----...
  • 1.JDBC的URL增加 tinyInt1isBit=false参数,但是测试发现转成了Byte类型 例如:jdbc:mysql://127.0.0.1:3306/***?tinyInt1isBit=false 2.用tinyint(2)代替 3.配置generatorConfig.xml <table schema="xxx" ...
  • 引言 借由本篇文章来探讨下在Mysql数据库中数值类型tinyint(1)和tinyint(4) 有啥区别呢? 什么是tinyint(M)? 先来了解下mysql中字符串类型varchar(M) 和数值类型tinyint(M) 的区别? 字符串列类型: varchar(M) 而言...
  • 1.BIT[M]位字段類型,M表示每個值的位數,范圍從1到64,如果M被忽略,默認為12.TINYINT[(M)] [UNSIGNED] [ZEROFILL]M默認為4,占1個字節很小的整數。帶符號的范圍是-128到127。無符號的范圍是0到255。3.BOOL,BOOLEAN...
  • mysql tinyint和char(1)性能对比在数据库设计的时候会遇到很多只需要0、1、2这种固定几个值的状态字段,基本上都建议设置为只占一字节的tinyint类型,有些觉得char(1)是一样,毕竟char(1)存储数字和字母时一个字符也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,710
精华内容 39,884
关键字:

tinyint(1)