使用BLOB或TEXT/CLOB在字段中保存HTML数据

Hop*_*ing 6 java mysql hibernate jpa blob

我需要使用Spring和JPA 2.1在mySQL数据库中的一个名为ProjectDescription的字段中存储一个html数据页面.我已经阅读了这个问题 和BLOB标签的所有其他问题,但需要清楚一下为什么字段在我的数据库中以某种方式保存.我使用String和byte []字段类型以下面的方式创建了字段.

方法1:将数据保存为TEXT(以Base64格式编码后,我使用以下方法将我的html数据保存为String)

@Basic(fetch = FetchType.LAZY) 
@Lob
private String projectDescription = "";
Run Code Online (Sandbox Code Playgroud)

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

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

我的假设:我假设因为一页html数据不是很大,所以TEXT可以和BLOB一起使用

我测试了两个,字段在mySQL数据库中保存如下

方法1中:

  1. 键入:TEXT
  2. DisplaySize一直是1431655765.

无论我的@Column(长度= 5000)annotaton如何,此大小都不会改变.

Method2中

  1. 类型:BLOB
  2. DisplaySize:-1

问题1: DisplaySize的来源是什么?在TEXT的情况下这看起来非常大,在byte []字段类型的情况下非常小(-1).为什么@Column长度似乎没有改变DisplaySize.

问题2:将HTML数据存储为String字段类型(最终为TEXT)而不是byte [](最终作为blob)是否可以?

注意:我已经阅读了BLOB标签的所有问题,并且很清楚,图像/文档需要保存为BLOB,文本需要保存为CLOB/TEXT.但是,考虑到在TEXT中为DB分配了大量DisplaySize,想再次确认HTML数据.

谢谢.

Ric*_*mes 5

如果它是整个页面,为什么要从数据库表中获取额外的获取层?如果它只是页面的一部分,那么我建议TEXT CHARACTER SET utf8mb4.页面中的任何非UTF-8文本都会造成麻烦; 不妨早点抓住它.

数据库行业正在融合使用UTF-8来处理所有文本.

Base64是8/6倍.而它正在做的就是避免使用不应该存在的非UTF-8字符.如果有的话,在客户端压缩它并存储在a中BLOB,从而缩小3/1.

在MySQL中,TEXT是64K 字节.你可能会更好MEDIUMTEXT,有16MB的限制.我说"字节"是因为,例如,中文每个字符需要3 个字节,有时需要4 个字节,所以只有大约25K字符的中文文字才能适应.TEXT

"DisplaySize一直是1431655765" - 什么??? 一个网页的千兆字节; 没门!即使这包括图像(它不应该),这是非常不合理的. 编辑:eggyal的评论2 ^ 32/3可能解释了这个奇数.

在MySQL中,SELECT length(my_text) ...将获得该列中的字节数.