精华内容
下载资源
问答
  • 问题描述使用Sqoop抽取MySQL数据到Hive时,会发现MySQL中tinyint类型数据在抽到Hive中只有0和1,其他的数值都被替换了,很诡异。其实Sqoop的官方文档给出了解释并给出了解决方案:27.2.5. MySQL: Import of ...

    问题描述

    使用Sqoop抽取MySQL数据到Hive时,会发现MySQL中tinyint类型的数据在抽到Hive中只有0和1,其他的数值都被替换了,很诡异。其实Sqoop的官方文档给出了解释并给出了解决方案:

    27.2.5. MySQL: Import of TINYINT(1) from MySQL behaves strangely

    Problem: Sqoop is treating TINYINT(1) columns as booleans, which is for example causing issues with HIVE import. This is because by default the MySQL JDBC connector maps the TINYINT(1) to java.sql.Types.BIT, which Sqoop by default maps to Boolean.

    Solution: A more clean solution is to force MySQL JDBC Connector to stop converting TINYINT(1) to java.sql.Types.BIT by adding tinyInt1isBit=false into your JDBC path (to create something like jdbc:mysql://localhost/test?tinyInt1isBit=false). Another solution would be to explicitly override the column mapping for the datatype TINYINT(1) column. For example, if the column name is foo, then pass the following option to Sqoop during import: --map-column-hive foo=tinyint. In the case of non-Hive imports to HDFS, use --map-column-java foo=integer.

    问题:

    Sqoop在抽取数据到Hive或者HDFS时,会自动将类型为Tinyint(1)的列转为boolean类型,这就是导致抽取到Hive或HDFS中的数据中只有0和1的原因。因为默认情况下,MySQL JDBC connector 会将Tinyint(1)映射为java.sql.Types.BIT类型,而Sqoop默认会映射为Boolean类型。

    解决方案:

    一个比较简单的解决方案是在MySQL JDBC connector上添加tinyInt1isBit=false,比如:jdbc:mysql://localhost/test?tinyInt1isBit=false)。

    另外一种解决方案是显式覆盖数据类型TINYINT(1)列的映射,例如,如果列名为foo,则在导入期间将以下选项传递给Sqoop:–map-column-hive foo=tinyint。在非Hive导入HDFS的情况下,使用 --map-column-java foo=Integer。

    展开全文
  • 公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true一、解决读取数据为true/false的问题场景:字段:status (值为1,2,3)类型tinyint 长度:1(有符号的)...

    今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true

    一、解决读取数据为true/false的问题

    场景:

    字段:status (值为1,2,3)

    类型:tinyint  长度:1(有符号的)

    结果:查询出来的数据列表,状态值不管是1还是2还是3,都是"boolean true"

    分析并解决:

    分析:由于MySql中没有boolean类型,所以会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1]

    解决:tinyint类型长度的问题,当我把长度改成4时,查询结果就正常了

    猜想并使用新的方法解决:

    如果不改变类型的长度,怎么让查询的结果正确呢?需要在查询语句上面做修改了

    在你需要执行的sql语句中,把这个状态字段*1,结果就会得到数据库存的值了(注意:记得加别名,不然查询出来的就是status*1 => '1')

    SELECTid,

    name,

    status*1 AS status,

    add_timeFROMtableNameWHEREplay_type= 0

    总结一下以上的两种解决方法:

    1.修改tinyint类型的长度

    2.在查询的sql语句上面做修改

    二、扩展一下tinyint[1]

    关于tinyint[1]在官网里边有一段话:

    ?115,72005,72005

    Which would be the more optimzed way to store a boolean, TINYINT(1) or ENUM( 'true' , 'false')? It seems that when storing an enum w/ two settings should only take up one bit, 0 or 1, but would spend more time looking up the enums in the beginning of the query. tinyint(1) however would take up 4 bits assuming it ranged 0-9. So it seems if you just wanted to fetch the value, tinyint(1) would be faster, but if you are searching through lots of records enum('true','false') would be faster. Do you concur??

    翻译过来如下:

    TINYINT(1)或ENUM('真','假')?

    用ENUM枚举当存储只有2个值时只占用一个位的宽度,0或1,但会花更多的时间去寻找了枚举查询的开始。

    用TINYINT(1)默认就会占用4个位的宽度(0000)

    得出结论:

    比如要存储一个介于0-9之间的值,为了查询获取这个值,建议用TINYINT(1)会更快,

    但如果你是为了大量记录枚举(“真”,“假”),那么用ENUM( 'true' , 'false') 搜索会更快。

    所以由这里可以看出,当你使用tinyint[1]来存储超过0,1两个值以外的值,比如存储2,那这个2就是脏数据,tinyint[1]只适用于存储0和1两个值,也即真和假,true和false

    一般的,咱们如果存的是纯数字的话,建议用tinyint,如果是字符串,且是固定长度的,建议用char,而enum的枚举字段,使用的使用需要慎重考虑,避免带来不必要的麻烦

    展开全文
  • mysql数据库TINYINT取值范围详解

    千次阅读 2021-01-18 22:21:50
    在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL 5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types)。Tinyint占用1...

    分享下mysql中TINYINT的取值范围,很基础的一些内容。

    在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL 5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types)。

    Tinyint占用1字节的存储空间,即8位(bit)。那么Tinyint的取值范围怎么来的呢?

    先看无符号的情况。无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint的最小值为0.无符号的最大值即全部8bit都为1,11111111,换算成十进制就是255.这很好理解。

    有符号的Tinyint的取值范围是怎么来的呢?在计算机中,用最高位表示符号。0表示正,1表示负,剩下的表示数值。那么有符号的8bit的最小值就是

    1  1  1  1  1  1  1  1=-127

    表示负值

    最大值:

    0  1  1  1  1  1  1  1=+127

    表示正值

    怎么有符号的最小值是-127,而不是-128呢?这就是本文要说的关键地方了,在计算机中,表示负值是用补码

    为什么有符号的TINYINT的最小值是-128?虽然“-0”也是“0”,但根据正、反、补码体系,“-0”的补码和“+0”是不同的,这样就出现两个补码代表一个数值的情况。为了将补码与数字一一对应,所以人为规定“0”一律用“+0”代表。同时为了充分利用资源,就将原来本应该表示“-0”的补码规定为代表-128。

    mysql中int、bigint、smallint 和 tinyint的区别详细介绍

    最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint。其中比较迷惑的是int和smallint的差别。今天就在网上仔细找了找,找到如下内容,留档做个总结:

    使用整数数据的精确数字数据类型。

    bigint

    从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。

    P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 (脚本学堂 www.jbxue.com)

    int

    从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

    smallint

    从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。

    tinyint

    从 0 到 255 的整型数据。存储大小为 1 字节。

    注释

    在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。

    在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。

    只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。

    int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。

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

    1.MySQL字段规定类型之后,存储是定长的,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) 存123 应该只存其中一个数字。

    下面是精简总结:

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

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

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

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

    但是,varchar(5)  这里的5 限制的是储存字符的个数,字符不分贵贱( 是不分 中文、英文、数字...)。

    总结数据来源于网络。。。

    展开全文
  • MySQL中tinyint类型 特点

    2021-08-26 20:00:35
    tinyint是个数据类型:存储很小的整数。带符号的范围是-128到127。无符号的范围是0到255。 此选项不能为空,创建时需要赋值
  • spring.datasource.url=jdbc:mysql://172.16.0.231:6704/tlias?tinyInt1isBit=false&
  • +------------+ | database() | +------------+ | chenliang | +------------+ 1 row in set (0.01 sec) 测试一:测试字段加上UNSIGNED后情况下插入数据的情况 ##创建test1测试表(这里指定了UNSIGNED,也就是无...
  • MySQL 数据类型int、bigint、smallint 和 tinyint的区别1. MySQL数据类型int、bigint、smallint 和 tinyint的区别2. tinyint概述2.1 tinyint有符号与无符号区别2.2 tinyint(1)与tinyint(2)区别 1. MySQL数据类型...
  • 今天在写程序时碰到了一个问题,我的数据结构如下: 使用表单传递参数:标题收件人内容经过一系列的数据处理之后得到我要的数据数组,输出结果为: 然后我把得到的数据用模型的save()方法存入到数据库中:$pm_list_...
  • 场景:字段:status (值为1,2,3)类型:tinyint 长度:1(有符号的)结果:查询出来的数据列表,状态值不管是1...在mysql中boolean=tinyint[1]解决:tinyint类型长度的问题,当我把长度改成4时,查询结果就正常了猜想...
  • 从Sqoop导入MySQL导入TINYINT(1)类型数据到hive(tinyint),数据为null 问题原因 Sqoop在抽取数据到Hive或者HDFS时,会自动将类型为Tinyint(1)的列转为boolean类型,这就是导致抽取到Hive或HDFS中的数据中只有0和1...
  • 在以往的经验中,如果遇到需要抉择是否用mysql的enum数据类型时,我基本不用思考的就会放弃ENUM()并用tinyint取而代之,原因就是我以前接触的哪些场景,均适合用在以往的经验中,如果遇到需要抉择是否用mysql的enum...
  • 在以往的经验中,如果遇到需要抉择是否用mysql的enum数据类型时, 我基本不用思考的就会放弃 ENUM()并用tinyint取而代之,原因就是我以前接触的哪些场景,均适合用tinyint,也即在第一次选择了tinyint后就再也没认真...
  • MySQL数据库确实提供布尔类型,此数据类型的关键字可以写成:布尔类型BOOL或布尔类型BOOLEAN,但是MySQL数据库数据类型的布尔类型是否也像其他数据库产品一样呢?本文揭开mysql布尔类型的真实面目。(一) 数据类型...
  • 前面几节Amy给大家分享了STE集合类型和枚举类型ENUM的测试数据,还没来得及看到的读者可以点击这里查看往期文章。之前看到一些平台上很多人咨询mysql是否提供布尔类型的问题。MySQL数据库确实提供布尔类型,此数据...
  • --SQL批量更新数据库中所有用户数据表中字段类型tinyint为int--关键说明:--1、从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段--2、更新字段类型前如果该字段有默认值索引则应先删除掉...
  • 问题:在使用Java的jdbc读取tinyint(1)类型数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢? 所以,JAVA数据类型 和 MYSQL的数据类型...
  • 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 | ...
  • MySQL数据类型与Java数据类型

    千次阅读 2021-01-18 18:56:27
    MySQL 中常见的数据类型tinyint,int,bigint 整数类型float,double,decimal 浮点类型date,dateTime,time,timestamp 时间类型char,varchar,text,tinytext,longtext,json 文本类型MySQL数据类型 java 数据类型映射int...
  • MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型...作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT 1、int
  • 今天写代码时候发现mysql数据库中tinyint的字段在java中转换成了boolean类型,原来是因为tinyint长度为1时候就会出现这种情况,详细信息可以查看这篇文章: ... ...
  • 使用整数数据的精确数字数据类型。 bigint 数值范围 从 -2^63 (-9223372036854775808) 到 2^63-1(9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 int 数值范围 从 -2^31 (-2,147,483,648) 到...
  • 展开全部MySql 中的tinyint(1)的使用在MySql中如何定义像Java中类型的Boolean类型数据..其实,mysql中 是没有直接定义成Boolean这种数据类型.它只能定义成 tinyint(1) ;当booean 等于...
  • 根据各种数据库的官方文档...一、Oracle表结构移植到Mysql中需要的类型转换 MYSQL ORACLE BLOB(220) RAW(220) BLOB(20) RAW(20) BLOG(1024) RAW(1024) VARCHAR(n) VARCHAR2(n) CHAR CHAR FLOAT(22,6) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,866
精华内容 25,946
关键字:

tinyint类型数据