您当前的位置: 首页 >  Java

liaowenxiong

暂无认证

  • 0浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Oracle/MySQL/Java数据类型对应表

liaowenxiong 发布时间:2020-03-19 16:37:45 ,浏览量:0

文章目录
  • 数据类型对照表
  • MySQL 的 int、bigint、mediumint、smallint、tinyint 的对比
  • 关于 MySQL 整型显示位数的问题
  • 关于 MySQL 的 timestamp
  • 关于 JDBC 类型

数据类型对照表 MysqlOracleJavaBIGINTNUMBER(19,0)java.lang.LongBITRAWbyte[]BLOBBLOB RAWbyte[]CHARCHARjava.lang.StringDATEDATEjava.sql.DateDATETIMEDATEjava.sql.TimestampDECIMALFLOAT (24)java.math.BigDecimalDOUBLEFLOAT (24)java.lang.DoubleDOUBLE PRECISIONFLOAT (24)java.lang.DoubleENUMVARCHAR2java.lang.StringFLOATFLOATjava.lang.FloatINTNUMBER(10,0)java.lang.IntegerINTEGERNUMBER(10,0)java.lang.IntegerLONGBLOBBLOB RAWbyte[]LONGTEXTCLOB RAWjava.lang.StringMEDIUMBLOBBLOB RAWbyte[]MEDIUMINTNUMBER(7,0)java.lang.IntegerMEDIUMTEXTCLOB RAWjava.lang.StringNUMERICNUMBERREALFLOAT (24)SETVARCHAR2java.lang.StringSMALLINTNUMBER(5,0)java.lang.IntegerTEXTVARCHAR2 CLOBjava.lang.StringTIMEDATEjava.sql.TimeTIMESTAMPDATEjava.sql.TimestampTINYBLOBRAWbyte[]TINYINTNUMBER(3,0)java.lang.BooleanTINYTEXTVARCHAR2java.lang.StringVARCHARVARCHAR2 CLOBjava.lang.StringYEARNUMBERjava.sql.Date MySQL 的 int、bigint、mediumint、smallint、tinyint 的对比

在这里插入图片描述

关于 MySQL 整型显示位数的问题

int(M),tinyint(M),bigint(M),mediumint(M)、smallint(M)后面的 M 不代表占用空间容量(即存储的字符数),而是代表最小显示位数。也就是说int(1)和int(11)占用的是4个字节,tinyint(1)和tinyint(4)占用的是1个字节,和M值没有关系。 当存储的数值表面长度小于M值时,只有设置了zerofill(表示用0来填充),才能够看到效果,换句话就是说,没有zerofill,M值就是无用的。

举例子:

mysql> desc test;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id1   | tinyint(2) | YES  |     | NULL    |       |
| id2   | tinyint(1) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.04 sec)

id1是tinyint(2),我插入123,行不行?

mysql> insert into test(id1,id2) values(123,2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+------+
| id1  | id2  |
+------+------+
|  123 |    2 |
+------+------+
1 row in set (0.00 sec)

可见是可以正常插入的。 tinyint(2)的2到底有啥意义?我们插入5看下效果:

mysql> insert into test values(5,10);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+------+
| id1  | id2  |
+------+------+
|  123 |    2 |
|    5 |   10 |
+------+------+
2 rows in set (0.00 sec)

有没有发现,不论插入的数字表面位数超过2还是小于2,都没有任何影响,纳闷了,到底设置2,干啥子呢?这就是奇葩了,想要看到效果,就必须用到zerofill指令,如下:


mysql> alter table test modify id1 tinyint(2) zerofill; // 必须告诉数据库,显示位数不足2位时,前面要补0 
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test;
+------+------+
| id1  | id2  |
+------+------+
|  123 |    2 |
|   05 |   10 |
+------+------+
2 rows in set (0.00 sec)

这样就看到5这个数值最后显示成05了,这个意义大不大?不大,没啥意思!!! 如果不指定显示位数,MySQL数据库对于整数型默认分配的显示位数如下: int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20),但是默认情况下没啥意义,因为我们创建数据库的时候相关字段根本没有设定zerofill,所以就毫无效果!

关于 MySQL 的 timestamp

如果不给 timestamp 类型的字段赋值或者赋值 null,则默认保存当前系统时间

关于 JDBC 类型

ResultSet 对象中获取列的值的方法:

int id = rs.getInt("id");
String name = rs.getString("name");
int job_id = rs.getInt("job_id");
int mgr = rs.getInt("mgr");
Date hiredate = rs.getDate("hiredate");
// salary 在数据库中的类型是 decimal
BigDecimal salary = rs.getBigDecimal("salary");
// bonus 在数据库中的类型是 decimal
BigDecimal bonus = rs.getBigDecimal("bonus");
int dept_id = rs.getInt("dept_id");

PreparedStatement 对象中的设置预编译 SQL 语句参数值的方法:

setByte​(int parameterIndex, byte x)
setBlob​(int parameterIndex, Blob x)
setDouble​(int parameterIndex, double x)
关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0416s