java长字符串用什么类型来保存?

比如:数据库有images字段用来存放图片的图片.可是图片的路径太多了.需要存放好几张图片的路径

"http://www.xxxx.com/1.jpg,http://www.xxxx.com/2.jpg,http://www.xxxx.com/3.jpg,http://www.xxxx.com/2.jpg,http://www.xxxx.com/1.jpg"

这些路径字符串要保存到数据库的.
现在是提示错误:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'SMALL_IMAGES' at row 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3607)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)

现在用到String ,报错的提示好像是字符串太长,放不下了.这个需要怎么解决啊?

阅读 16.5k
11 个回答

这个和Java没有关系,把数据库相应的字段数据类型设置为varchar试试,是数据库的字段长度不够。。。

把数据库varchar长度设置长点一点,比如varchar(1000)。

字符串长度用varchar(长度),如果需要保存更长的字符串可以用text,或者blob;
建议少用长varchar和text喝blob,具体看业务

"http://www.xxxx.com/1.jpg,http://www.xxxx.com/2.jpg,http://www.xxxx.com/3.jpg,http://www.xxxx.com/2.jpg,http://www.xxxx.com/1.jpg"

是否考虑可以分割后保存多条记录呢

把varchar长度设置长一点就ok,尽量不要用blob,我用过查询时会非常慢

varchar 不过要考虑mysql 有一个总长度的限制,text不受这个限制,不过速度上好像会慢一些

一般来说varchar应该够用了

如果不限制图片的数量,建议拆分成多条记录;
否则在前台做好验证,不要超出数据定义列的最大长度,如图片最多10个,每个url长度不超过100,可以定义为VARCHAR(1000)。

json的格式我觉得没必要,长度比逗号分隔的字符串更长。

varchar或者text,通过设置最大长度
你这个例子,可以提取公共字段,进行拆分,域名,文件名
或者可以进行分表,通过主子表的形式,拆分为多条记录来保存,通过ID关联
记录ID,文件路径

你的字段类型是什么,改成text吧

用StringBuff

varchar 长度设置大一点,或者直接改成text

这种可以考虑用text,用json格式保存进去。

这种不定长的图片地址肯定会考虑text。lz并没有说明场景,假如在电商中的商品介绍副图,这个图片有多少是不可假设的。再之varchar在存储上是有一定的损失的。

踩的人可以下来说说缘由否?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题