一,定位错误原因。
Data too long for column 'image' at row 1字面意思就是 image 列的数据太长了。
通过字面意思,我们基本上可以断定,是image字段数据超过了数据库表限制的最大长度导致的错误。
使用Navicat打开数据库表设计看一下image字段,果然这个字段设置为char 43,也就是固定43个字符,如果超过了43个字符就无法成功存储这条数据。
再查看一下我们刚刚提交的这条数据中image字段的数据,/uploadfile/2022/1120/20221120015239805.jpeg,44个字符,果然超过了。
二,解决错误的方案。
定位到报错的原因,解决起来就简单多了。对于这个错误,我们可以有很多种解决方案,看那种最合适就采用那种即可。
1:重新设计这张数据库表,将image字段设置为char 44,就可以成功保存上面的数据了。
优点是占用空间小。缺点是,后续再来一个超过44个字符的数据又会报出这个错误。
2:将image字段设置为varchar 255,给这个字段一个不固定的长度。
优点是不超过255字符的数据都可以保存。缺点是相对于上面char类型,占用空间多,性能降低。
3:给上传图片的功能增加一个文件类型过滤的功能,只允许上传png和jpg类型的图片,把gif,jpeg,webp等类型的图片统统过滤掉,一旦符合过滤条件,前端就提示:重新上传,不支持上传该类型的文件,只允许上传png类型和jpg类型的图片。
我本次就是采用了这个解决方案,仅供大家参考。