java—使用blob或text/clob在字段中保存html数据

czfnxgou  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(577)

我需要使用spring&jpa2.1在mysql数据库中的projectdescription字段中存储一页html数据。我已经阅读了这个问题和所有其他带有blob标签的问题,但是需要弄清楚为什么字段以某种方式保存在我的db中。我使用字符串和byte[]字段类型以下面的方式创建了字段。
方法1:将数据保存为文本(在以base64格式编码之后,我使用下面的方法将html数据保存为字符串)

@Basic(fetch = FetchType.LAZY) 
@Lob
private String projectDescription = "";

方法2:使用blob将数据保存为二进制

@Basic(fetch = FetchType.LAZY)
@Lob
@Column(length=5000)
private byte[]  projectDescription1 =new byte[0];

我的假设:我假设由于一页html数据不是很大,所以文本和blob一样可以
我测试了这两个字段,并将其保存在mysql数据库中,如下所示
在方法1中:
类型:文本
显示大小始终为1431655765。
不管我的@column(length=5000)注解是什么,这个大小都不会改变。
在方法2中
类型:blob
显示大小:-1
问题1:这个displaysize的来源是什么?对于文本,这看起来相当大,对于byte[]字段类型,这看起来非常小(-1)。为什么@column length似乎没有改变displaysize。
问题2:是否可以将html数据存储为字符串字段类型(最终为文本)而不是byte[](最终为blob)?
注意:我已经阅读了所有带有blob标签的问题,并且很清楚需要将图像/文档保存为blob,将文本保存为clob/text。不过,我想再次确认一下html数据的displaysize在db中分配给文本的大小。
谢谢。

wh6knrhe

wh6knrhe1#

如果它是一个完整的页面,为什么还要经历从数据库表获取的额外层呢?如果它只是一个页面的一部分,那么我建议 TEXT CHARACTER SET utf8mb4 . 页面中的任何非utf-8文本都会引起麻烦;不妨早点赶上。
而数据库行业正逐渐将utf-8用于所有文本。
base64是8/6倍大。它所做的就是避免出现不应该出现的非utf-8字符的问题。如果有的话,将其压缩到客户端并存储在 BLOB 因此收缩了3/1。
在mysql中, TEXT 是64k字节。你最好还是 MEDIUMTEXT ,限制为16mb。我说“字节”是因为,例如,中文每个字符需要3个字节,有时是4个字节,所以只能容纳大约25k个字符的中文文本 TEXT .
“显示大小一直是1431655765”--什么???网页的千兆字节;不可能!即使这包括图像(它不应该),这是非常不合理的。编辑:eggyal对2^32/3的评论可能解释了这个奇数。
在mysql中, SELECT length(my_text) ... 将获取该列中的字节数。

相关问题