I需要使用Spring和JPA 2.1在MySQL数据库中将一个html数据页面存储到名为ProjectDescription的字段中。我已经阅读了 this question 和所有其他带有BLOB标签的问题,但需要对为什么在我的数据库中以某种方式保存字段的清晰度有所了解。我已经使用String和byte[]字段类型创建了以下方式的字段。
Method1:将数据保存为TEXT(在Base64格式编码之后,我使用下面的方法将我的HTML数据保存为String)
@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,TEXT是可以的。
我测试了两种方法,它们在MySQL数据库中保存的字段如下:
在方法1中:
- 类型:TEXT
- DisplaySize恒定为1431655765。
无论我使用@Column(length=5000)注释,这个大小都不会改变。
在方法2中:
- 类型:BLOB
- DisplaySize:-1
问题1:这个DisplaySize的来源是什么?在TEXT的情况下,它似乎非常大,在byte[]字段类型的情况下非常小(-1)。为什么@Column长度似乎不能改变DisplaySize。
问题2:将HTML数据存储为String字段类型(最终作为TEXT)而不是byte[](最终作为blob)是否可以?
注意:我已经阅读了所有带有BLOB标签的问题,并清楚地知道图片/文档需要保存为BLOB,而文本则需要保存为CLOB/TEXT。但是,考虑到在数据库中为TEXT分配了多大的DisplaySize,我想再次确认HTML数据的情况。谢谢。
DisplaySize
值的?虽然 MySQL 数字类型可以有“显示宽度”属性,但字符串类型要么具有显式的或隐式的“最大长度”,但这通常不会被称为DisplaySize
。此外,1431655765 的值(即 0x55555555)非常奇怪... 它等于 2^32/3,因此表示可以存储在LONGTEXT
列中的最大数量的 3 字节字符... 不确定对任何人有什么用处。 - eggyal