我是靠谱客的博主 感动柚子,这篇文章主要介绍Oracle/MySQL/Java数据类型对应表数据类型对照表MySQL 的 int、bigint、mediumint、smallint、tinyint 的对比关于 MySQL 整型显示位数的问题关于 MySQL 的 timestamp关于 JDBC 类型,现在分享给大家,希望可以做个参考。

文章目录

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

数据类型对照表

MysqlOracleJava
BIGINTNUMBER(19,0)java.lang.Long
BITRAWbyte[]
BLOBBLOB RAWbyte[]
CHARCHARjava.lang.String
DATEDATEjava.sql.Date
DATETIMEDATEjava.sql.Timestamp
DECIMALFLOAT (24)java.math.BigDecimal
DOUBLEFLOAT (24)java.lang.Double
DOUBLE PRECISIONFLOAT (24)java.lang.Double
ENUMVARCHAR2java.lang.String
FLOATFLOATjava.lang.Float
INTNUMBER(10,0)java.lang.Integer
INTEGERNUMBER(10,0)java.lang.Integer
LONGBLOBBLOB RAWbyte[]
LONGTEXTCLOB RAWjava.lang.String
MEDIUMBLOBBLOB RAWbyte[]
MEDIUMINTNUMBER(7,0)java.lang.Integer
MEDIUMTEXTCLOB RAWjava.lang.String
NUMERICNUMBER
REALFLOAT (24)
SETVARCHAR2java.lang.String
SMALLINTNUMBER(5,0)java.lang.Integer
TEXTVARCHAR2 CLOBjava.lang.String
TIMEDATEjava.sql.Time
TIMESTAMPDATEjava.sql.Timestamp
TINYBLOBRAWbyte[]
TINYINTNUMBER(3,0)java.lang.Boolean
TINYTEXTVARCHAR2java.lang.String
VARCHARVARCHAR2 CLOBjava.lang.String
YEARNUMBERjava.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值就是无用的。

举例子:

复制代码
1
2
3
4
5
6
7
8
9
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,行不行?

复制代码
1
2
3
4
5
6
7
8
9
10
11
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看下效果:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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指令,如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 对象中获取列的值的方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
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 语句参数值的方法:

复制代码
1
2
3
4
setByte​(int parameterIndex, byte x) setBlob​(int parameterIndex, Blob x) setDouble​(int parameterIndex, double x)

最后

以上就是感动柚子最近收集整理的关于Oracle/MySQL/Java数据类型对应表数据类型对照表MySQL 的 int、bigint、mediumint、smallint、tinyint 的对比关于 MySQL 整型显示位数的问题关于 MySQL 的 timestamp关于 JDBC 类型的全部内容,更多相关Oracle/MySQL/Java数据类型对应表数据类型对照表MySQL内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部