有不足还请指教
整数类型:
M是字符数
类型 | 字节长度 | 范围 | 返回值列类型名 | 返回值列类名 |
---|---|---|---|---|
BIT(1) | 1 | 0、1 | BIT | java.lang.Boolean |
BIT(M>1) | 1 | 无符号[0,255],有符号[-128,127] | BIT | byte[] |
TINYINT | 1 | 无符号[0,255],有符号[-128,127] | TINYINT | 默认设置TINYINT(1),java.lang.Boolean;否则,java.lang.Integer |
SMALLINT[(M)] | 2 | 无符号[0,65535],有符号[-32768,32767] | SMALLINT | java.lang.Integer |
MEDIUMINT[(M)] | 3 | 无符号[0,224-1],有符号[-223,223-1] | MEDIUMINT | java.lang.Integer |
INT,INTEGER[(M)] | 4 | 无符号[0,232-1],有符号[-231,231-1] | INTEGER | java.lang.Integer;无符号则为 java.lang.Long |
BIGINT[(M)] | 8 | 无符号[0,264-1],有符号[-263 ,263-1] | BIGINT | java.lang.Long;无符号则为java.math.BigInteger |
浮点型:
类型 | 字节长度 | 范围 | 返回值列类型名 | 返回值列类名 |
---|---|---|---|---|
FLOAT,REAL[(M,D)] | 4 -> 32bit : 1bit(符号位) 8bits(指数位) 23bits(尾数位) | D是小数位,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。精度只有6(~7)位。 | FLOAT | java.lang.Float |
DOUBLE[(M,D)] | 8 -> 64bit :1bit(符号位) 11bits(指数位) 52bits(尾数位) | M字符数,D小数位。精度只有15(~16)位。 | DOUBLE | java.lang.Double |
float与double的范围和精度
-
范围
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:
1bit(符号位) 11bits(指数位) 52bits(尾数位)
于是,float的指数范围为-127~ +128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2128 ~ +2128,也即-3.40E+38 ~ +3.40E+38;double的范围为-21024 ~ +21024,也即-1.79E+308 ~ +1.79E+308。 -
精度
float和double的精度是由尾数的位数来决定的。
浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共7位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
实点型
类型 | 字节长度 | 范围 | 返回值列类型名 | 返回值列类名 |
---|---|---|---|---|
DECIMAL,NUMERIC[(M[,D])] | M+2 | DECIMAL | java.math.BigDecimal |
字符串
M是字符数
类型 | 字节长度 | 范围 | 返回值列类型名 | 返回值列类名 |
---|---|---|---|---|
CHAR(M) | M | 定长字符串 | CHAR | java.lang.String (除非列字符集是BINARY, 返回byte[]) |
VARCHAR(M) | M | 变长字符串,要求M<=255 | VARCHAR | java.lang.String (除非列字符集是BINARY, 返回byte[]) |
ENUM(‘value1’,‘value2’,…) | 1或2 | 最多28个值 | CHAR | java.lang.String |
SET(‘value1’,‘value2’,…) | 1、2、4或8 | 最多64个成员 | CHAR | java.lang.String |
BINARY(M) | M+4 | BINARY | byte[] | |
VARBINARY(M) | M+4 | VARBINARY | byte[] |
文本
类型 | 字节长度 | 范围 | 返回值列类型名 | 返回值列类名 |
---|---|---|---|---|
TINYTEXT | Max:255 | 大小写不敏感 | VARCHAR | java.lang.String |
TEXT | Max:64K | VARCHAR | java.lang.String | |
MEDIUMTEXT | Max:16M | VARCHAR | java.lang.String | |
LONGTEXT | Max:4G | VARCHAR | java.lang.String |
日期时间
M是字符数
参考:https://www.cnblogs.com/wlzjdm/p/6953398.html
类型 | 字节长度 | 范围 | 返回值列类型名 | 返回值列类名 |
---|---|---|---|---|
YEAR[(2|4)] | 1 | 1901-2155 | YEAR | 默认java.sql.Date,如果设置yearIsDateType 为false,返回java.sql.Short |
DATE | 3 | 1001-1-1/9999-12-31 | DATE | java.sql.Date |
TIME | 3 | 838:59:59/838:59:59 | TIME | java.sql.Time |
DATETIME | 8 | 1001-1-1 00:00:00/9999-12-31 23:59:59 | DATETIME | java.sql.Timestamp |
TIMESTAMP[(M)] | 4 | 1970-01-01 00:00:00/2037 某时 | TIMESTAMP | java.sql.Timestamp |
BLOB (binary large object)
二进制大对象,是一个可以存储二进制文件的容器。
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
https://www.cnblogs.com/vanishfan/p/3339087.html
myql数据库实现图片存储和读取:https://blog.csdn.net/qq_37470552/article/details/78183462
类型 | 字节长度 | 范围 | 返回值列类型名 | 返回值列类名 |
---|---|---|---|---|
TINYBLOB | Max:255 | 大小写不敏感 | TINYBLOB | byte[] |
BLOB | Max:64K | BLOB | byte[] | |
MEDIUMBLOB | Max:16M | MEDIUMBLOB | byte[] | |
LONGBLOB | Max:4G | LONGBLOB | byte[] |
地理空间数据类型(没接触过):
geometry、geometrycollection、linestring、multilinestring、point、multipoint、polygon、multipolygon
学习:
https://blog.csdn.net/wiborgite/article/details/85069833
https://blog.csdn.net/wiborgite/article/details/85076270
文章参考:
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-type-conversions.html
https://www.cnblogs.com/-xlp/p/8617760.html