You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在H2数据库中设置max_allowed_packet及BLOB大小限制用于测试

限制H2数据库BLOB大小并测试小数据输入

一、设置H2中BLOB的大小限制

1. 创建表时指定限制

在创建表的DDL语句中,直接为BLOB字段指定最大长度(单位为字节)。例如限制为1MB:

CREATE TABLE file_storage (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    data BLOB(1048576) -- 限制BLOB最大为1MB
);

2. 修改现有表的BLOB字段

如果表已存在,使用ALTER TABLE语句调整字段限制:

ALTER TABLE file_storage ALTER COLUMN data BLOB(524288); -- 修改为512KB限制

3. Spring Boot JPA实体映射匹配

在JPA实体类中,通过@Column注解指定长度,保证实体与数据库约束一致:

@Entity
public class FileStorage {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Lob
    @Column(length = 1048576) // 对应数据库1MB的BLOB限制
    private byte[] data;

    // 省略getter、setter
}

二、用多组小数据开展测试

1. 单元测试验证约束

编写Spring Boot单元测试,生成不同大小的测试数据,验证正常存储和超限拦截:

@SpringBootTest
@Transactional
public class BlobSizeValidationTest {

    @Autowired
    private FileStorageRepository storageRepository;

    @Test
    void shouldSaveSmallBlobSuccessfully() {
        // 生成1KB的测试数据
        byte[] smallData = new byte[1024];
        new Random().nextBytes(smallData);
        
        FileStorage storage = new FileStorage();
        storage.setData(smallData);
        storageRepository.save(storage);
        
        // 验证数据已存入
        assert storageRepository.findById(storage.getId()).isPresent();
    }

    @Test
    void shouldThrowExceptionWhenBlobOversized() {
        // 生成1.5MB数据,超过1MB限制
        byte[] oversizedData = new byte[1572864];
        new Random().nextBytes(oversizedData);
        
        FileStorage storage = new FileStorage();
        storage.setData(oversizedData);
        
        // 预期抛出数据完整性异常
        assertThrows(DataIntegrityViolationException.class, () -> storageRepository.save(storage));
    }
}

2. H2控制台手动插入测试数据

通过H2控制台执行SQL,插入不同大小的BLOB数据快速验证:

-- 插入100字节的测试数据(用十六进制表示)
INSERT INTO file_storage(data) VALUES (X'000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F');

-- 用H2内置函数生成指定大小的BLOB(比如512KB)
INSERT INTO file_storage(data) VALUES (SPACE(524288));

3. 验证限制生效

当插入超过限制的BLOB时,H2会直接抛出错误,例如:

Value too long for column "DATA BLOB(1048576)": "..." (actual length 1572864)

这说明大小限制已成功生效。

内容的提问来源于stack exchange,提问作者Galet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:21:16