Mysql varchar字段存储长文本报错
使用MySQL存储较长文本的时候突然间无法存储
varchar存储长文本长度不够
事情原因,最近在练习一套基本的增删改查,但是有一个字段需要插入较多的内容,数据库里我这个字段的类型的varchar(255)。
报错信息 :ERROR 1406 (22001): Data too long for column ‘desc’ at row 1,一眼看出表字段设置的长度不够。
- VARCHAR存储,全部为常用汉字(UTF-8
3字节编码长度),则VARCHAR(255)共可存放约80个汉字;(我的mysql是5.7版本的,没有去查别的版本是不是也是这样)
但是我想在这个字段里去插入比较大的长文本,大概100-1000的汉字,varchar字段这时显然就无法满足我的这个需求。
TEXT和BLOB
经过查询发现了text字段类型,该类型可以存储大文本,(前提条件,Java里对应的字段是String类型)使用这个类型不会有太多的改动,只需要设置mysql表里对应的字段为text类型就可以了。
在查询的时候还有一个BLOB类型,TEXT和BLOB之间的主要差别是 BLOB 能用来保存二进制数据,比如照片;而 TEXT 只能保存字符数据,比如一篇文章或者日记。
BLOB 和 TEXT 值会引起一些性能问题,所以使用需谨慎
TEXT 和 BLOB 中有分别包括TEXT、MEDIUMTEXT、LONGTEXT 和 BLOB、MEDIUMBLOB、LONGBLOB3 种不同的类型,这些类型之间的主要区别是存储文本长度不同和存储字节大小不同,用户应该根据实际情况选择能够满足需求的最小存储类型。
总结的几种MySQL对应java的变量类型
> varchar:不定长字符串
字符串或是没有合适类型时,可以选择它作为字段类型
对应Java中的String
> int bigint: 数值
一般以int作为数字的默认选择,数值很大时使用bigint
对应Java中的Long
> char:定长字符串
适用于盐、md5加密后的密码等情况
对应Java中的String
> float double: 浮点数
适用于各种小数,除非金额等情况,小数推荐使用double
各自对应Java中的Float,Double
> decimal:精确浮点数
适用于金额
对应Java中的BigDecimal
> tinyint: 逻辑型
适用于是/否的情况,ORM框架一般会将其映射为true/false
对应Java中的Boolean
> date time datetime:“时间”
各自适用于年月日,时分秒,年月日时分秒三种情况
都对应Java中的java.util.Date
> text: 文本
适用于富文本、文章正文等
对应Java中的String
> enum: 枚举
适用于性别、订单状态等
对应Java中的String
> blob: 二进制
适用于小图片、小音频等。(不过更常用的做法是上传到服务器,在DB中存储url)