使用MySQL存储较长文本的时候突然间无法存储

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)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值