mysql 记一次自以为是的翻车事件
最近在创建数据库时 打 text 发现还有个几个包含text的类型:
text 65535/3=21845个汉字,约20000,存储空间占用:65535/1024=64K的数据,
tinytext 最大长度255个字节(2^8-1),
longtext 4294967295/3=1431655765个汉字,14亿,存储空间占用:4294967295/1024/1024/1024=4G的数据,
mediumtext 16777215/3=5592405个汉字,560万,存储空间占用:16777215/1024/1024=16M的数据
想着文字不多用text(65535/3=21845个汉字)有点占用空间 就用 tinytext
节省一点空间但当时不知道长度。
结果各种报错:⬇️
Caused by: java.sql.SQLException: Incorrect string value: '\xE5\x89\x8D\xE9\x9B\x86...' for column 'description' at row 1
各种搜发现好想又不是编码问题,utf8md4 也设了不管用。。还好最后查了一下找到了问题。
附一下mysql字段类型:
一、字符串类型
类型
范围
说明
Char(N) [ binary]
N=1~255 个字节(4.1以下版本)
N=1~65535 个字节(4.1以下版本)
binary :分辨大小写
固定长度 std_name cahr(32) not null
VarChar(N) [binary]
N=1~255 个字节(4.1以下版本)
N=1~65535 个字节(4.1以下版本)
binary :分辨大小写 可变长度 std_address varchar(256)
TinyBlob 最大长度255个字节(2^8-1)
Blob (Binary large objects)储存二进位资料,且有分大小写
memo text not null
TinyText 最大长度255个字节(2^8-1)
Blob 最大长度65535个字节(2^16-1)
Text 最大长度65535个字节(2^16-1)
MediumBlob 最大长度 16777215 个字节(2^24-1)
MediumText 最大长度 16777215 个字节(2^24-1
LongBlob 最大长度4294967295个字节 (2^32-1)
LongText 最大长度4294967295个字节 (2^32-1)
Enum 集合最大数目为65535 列举(Enumeration),Enum单选、Set复选 sex enum(1,0)
habby set(‘玩电玩’,'睡觉’,'看电影’,'听音乐’)
Set 集合最大数目为64
辨別Null与Not Null :Null为允许储存空值(Null)
二、数字/数值类型
类型
范围
说明
例如
TinyInt[M] [UNSIGNED] -128~127
UNSIGNED : 0~255 num tinyint unsigned
SmallInt[M] [UNSIGNED] -32768~32767
UNSIGNED :0~ 65535
MediumInt[M] [UNSIGNED] -8388608~8388607
UNSIGNED :0~16777215
Int[M] [UNSIGNED] -2^31~2^31-1
UNSIGNED : 0~2^32
BigInt[M] [UNSIGNED] -2^63~2^63-1
UNSIGNED : 0~2^64
Float [(M,D)]
-3.4E+38~3.4E+38( 约 )
注: M 为长度, D 为小数,Float 4 bytes,Double 8 bytes
Double [(M,D)] -1.79E+308~1.79E+308( 约 )
Decimal [(M,D)]
辨別ZeroFill:当宣告关键字ZeroFill为自动填满0,如 000021
三、日期时间类型
类型
范围
说明
Date 日期(yyyy-mm-dd)
Time 时间(hh🇲🇲ss)
DateTime 日期与时间組合(yyyy-mm-dd hh🇲🇲ss)
TimeStamp yyyymmddhhmmss
Year
年份yyyy