Mysql tinyint长度为1时在java中被转化成boolean型

在项目中遇到从MySQL查询到的tinyint数据在使用Jfinal函数后变为布尔类型,导致后续出错的问题。通过查找资料发现,tinyint(1)仅用于保存bool值(0和1),不适用于保存更多值。解决方案是使用tinyint(4)进行数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中遇到一个巨坑,程序没问题,从mysql查询到的tinyint数据中莫名其妙的变成了布尔类型,导致后续出错。这种细节性的问题,只有遇到时才会关注到,记录备忘。


下面是详细解释:

在项目中有一个字段为user_type,长度设置为1,表示注册用户和非注册用户,是注册用户为 1,否则为 2。因为查询语句是使用的Jfinal相关函数,查找到其中的获取数据类型字段程序,如下所示:



在图中光标处断点发现,通过getObeject后,类型变为boolean。而其中tinyint长度为4的,经过转化后没有问题,确定是getObeject对长度为1的处理有问题。经过查找资料,发现网上确实有这个问题的介绍。链接如下:

http://www.cnblogs.com/joeylee/p/3878223.html

解决方法 .

Tinyint(1)  就只用来保存 bool 值  只有0和1  不要保存其他的值,如果要保存多的值,就用 Tinyint(4) 


附:

常见数据库字段类型与java.sql.Types对应表

  
Oracle与java.sql.Types的对应   
  
Oracle                                java.sql.Types    
  
 blob                                     blob  
 char                                     char  
 clob                                     clob  
 date                                    date  
 number                               decimal  
 long                                     varbinary  
 nclob,nvarchar2                   other  
 smallint                                smallint  
 timestamp                            timstamp  
 raw                                      varbinary  
 varchar2                               varchar  
  
Sql server与java.sql.Types的对应   
  
Sql server                           java.sql.Types  
   bigint (2005,2008)                bigint  
   timstamp,binary                    binary  
   bit                                         bit  
   char,nchar,unqualified          char  
   datetime                               date  
   money,smallmoney,decimal  decimal  
   float (2005,2008)                  double  
   float(2000)                            float  
   int                                          integer  
   image                                    longvarbinary  
   text,ntext,xml                        longvarchar  
  
    numeric                                 numeric  
    real                                       real  
    smallint                                smallint  
    datetime,smalldatetime       timestamp  
    tinyint                                  tinyint  
    varbinary                             varbinay  
    nvarchar,varchar                 varchar  
  
DB2与java.sql.Types的对应   
  
bigint                                       bigint  
   blob                                      blob  
   character,graphic                 char  
   clob                                      clob  
   date                                     date  
   decimal                                decimal  
   double                                 double  
    integer                               integer  
    longvargraphic                   longvarchar  
    longvarchar  
  
real                                        real  
 smallint                                 smallint  
 time                                      time  
 timestamp                            timestamp  
 vargraphic                            varchar  
 varchar  
  
MySQL与java.sql.Types的对应   
  
MySQL                          java.sql.Types  
  bigint                              bigint  
   tinyblob                         binary  
   bit                                  bit  
   enum,set,char               char  
   date,year                      date  
   decimal,numeric            decimal  
   double,real                   double  
   mediumint,int                integer  
   blob,mediumblob           blob  
   longblob  
   float                               real  
  
smallint                           smallint  
   time                             time  
   timestamp,datetime     timestamp  
   tinyint                           tinyint  
   varbinary,binary           varbinay  
   varchar,tinytext,text     varchar  




<think>首先,用户的问题是:“我想了解MySQLtinyint的数据长度以及其存储范围请问MySQLtinyint数据类长度及取值范围”。我需要基于提供的引用和系统指令来回答。关键引用:-引用[1]:提到tinyint的取值范围,带符号是-128到127,无符号是0到255。-引用[2]:确认了tinyint的取值范围:带符号-128到127,无符号0到255。-引用[3]:讨论了位类,但未直接提到tinyint。-引用[4]:详细列出了各种数据类,包括tinyint。它说tinyint1字节的整数类。从引用[4]:它明确说tinyint1字节的数据类。引用[1]和[2]也支持这个范围。所以,我需要整合信息:-数据长度tinyintMySQL中占用1字节(8位)。-存储范围:-带符号(signed):-128到127-无符号(unsigned):0到255在回答中,必须遵循系统指令:-行内数学表达式用$...$,例如范围可以写为$-128\text{to}127$。-独立公式用$$...$$,但这里可能不需要。-使用中文回答。-生成相关问题。-在引用的段落末尾自然地添加引用标识,例如[^1]。回答结构:1.先直接回答用户的问题,清晰明了。2.解释数据长度和范围。3.引用来源。4.生成相关问题。用户问题焦点:tinyint的数据长度和存储范围。回顾引用:-引用[1]和[2]都提到范围。-引用[4]提到长度1字节。在回答中引用:-当提到范围,引用[1]或[2],因为它们直接说范围。-当提到长度,引用[4],因为它说tinyint1字节。生成相关问题:-类似示例中的快速排序问题,我需要生成与tinyint相关的问题。-可能的问题:tinyint与其他整数类的比较、何使用tinyint、优化存储等。相关问题想法:1.tinyint与smallintint的区别是什么?2.在什么场景下使用tinyint最合适?3.如何优化MySQL中的整数类存储?确保回答真实可靠,基于引用。完整回答结构:-开头:简要介绍tinyint。-详细解释数据长度和范围。-添加引用。-生成相关问题。</think>### MySQL tinyint 数据类详解 在MySQL数据库中,`tinyint`是一种常用的整数数据类,主要用于存储小范围的整数值。它占用固定的存储空间,并且根据是否带符号(signed)有不同的取值范围。下面我将逐步解释其数据长度和存储范围,确保回答基于可靠来源。 #### 1. **数据长度** - `tinyint`在MySQL中占用 **1字节(8位)** 的存储空间[^4]。这是因为MySQL使用1个字节来表示`tinyint`值,无论它是否带符号。例如,存储一个值如 `5` 或 `-10` 都只消耗1字节。 - 与其他整数类对比: - `smallint` 占用 2 字节 - `int` 占用 4 字节 - `bigint` 占用 8 字节 这种紧凑的存储设计使`tinyint`非常适合存储小范围数据,从而节省数据库空间[^1][^4]。 #### 2. **存储范围** `tinyint`的取值范围取决于是否定义为无符号(unsigned): - **带符号(signed)**:允许存储负数和正数,范围为 $-128$ 到 $127$。这相当于数学上的闭区间 $[-128, 127]$[^1][^2]。 - 例如:`-128`, `0`, `127` 都是有效值。 - **无符号(unsigned)**:只允许存储非负数,范围为 $0$ 到 $255$。这相当于数学上的闭区间 $[0, 255]$[^1][^2]。 - 例如:`0`, `100`, `255` 都是有效值。 在定义表结构,您可以通过SQL语句指定是否带符号: ```sql -- 带符号的tinyint(默认) CREATE TABLE example ( id TINYINT SIGNED ); -- 无符号的tinyint CREATE TABLE example ( status TINYINT UNSIGNED ); ``` 实际应用中,`tinyint`常用于存储状态标志(如 `0` 表示“关闭”,`1` 表示“开启”)或小范围的计数数据[^3][^4]。 #### 3. **注意事项** - **性能与优化**:`tinyint`的1字节长度使其在查询和索引中非常高效,尤其当数据范围较小。如果值超出范围(如尝试存储 `256` 在无符号字段),MySQL会报错或截断数据,因此设计应确保值在范围内[^1][^2]。 - **与其他类比较**:相比`bit`类(常用于位标志),`tinyint`更易读和维护,因为它直接显示为整数而非ASCII码[^3]。引用中提到:“虽然MySQL提供了位类bit,但一般不建议将数据类设置成位类...因为查询位类数据,默认会按照ASCII码对应的值进行显示,这对于将来数据库管理员维护数据库或程序员调试程序都是不太方便的。”[^3] - **实际场景**:`tinyint`适用于性别编码(`0` 为男,`1` 为女)、布尔值(`0`/`1`)或年龄范围(如无符号存储0-255岁的年龄)。如果数据可能超出255,应使用`smallint`或`int`[^4]。 总结:MySQL `tinyint` 的数据长度固定为 **1字节**,存储范围在带符号为 $-128$ 到 $127$,无符号为 $0$ 到 $255$。这使其成为高效存储小整数的理想选择,特别在空间敏感的应用中[^1][^2][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值