最近項目中同時用到了存儲大文本的兩種情況,做一小結。
mysql數據類型參考連接:mysql數據類型
1.將文件存儲到 mysql 中,存儲爲二進制數據。
mysql 的表字段類型選擇了LONGBLOB。在java中生成的實體類對應的字段類型爲 byte[ ];
CREATE TABLE `tmp_jmeter_case` (
`ID` int(16) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`JMETER_CASE_NAME` varchar(100) DEFAULT NULL COMMENT 'jmeter用例名稱',
`FILE_NAME` varchar(100) DEFAULT NULL COMMENT '原文件名',
`SYS_FILE_NAME` varchar(100) DEFAULT NULL COMMENT '系統文件名',
`UPLOAD_TIME` timestamp NULL DEFAULT NULL COMMENT '上傳時間',
`UPLOAD_BY` varchar(10) DEFAULT NULL COMMENT '上傳人',
`UPDATE_TIME` timestamp NULL DEFAULT NULL COMMENT '修改時間',
`UPDATE_BY` varchar(10) DEFAULT NULL COMMENT '修改人',
`FILE_DATA` longblob COMMENT '用例數據',
`YN` char(1) DEFAULT '1' COMMENT '是否刪除(1-未刪除,0-已刪除)',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='jmeter測試用例表';
public class TmpJmeterCasePo implements Serializable {
private Integer id;
private String jmeterCaseName;
private Date uploadTime;
private String uploadBy;
private byte[] fileData; //longblob 對應的java字段類型爲 byte[]
選擇這種方式落庫的特點在於,想要查看存下來的數據需要先解析 二進制數據,不能直觀看到文本內容。
2.將文件存儲到 mysql 中,存儲爲文本數據。
CREATE TABLE `tmp_jmeter_exe_log` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`JMETER_CASE_ID` int(16) DEFAULT NULL COMMENT 'jmeter測試用例ID',
`EXE_BY` varchar(10) DEFAULT NULL COMMENT '操作人',
`EXE_TIME` timestamp NULL DEFAULT NULL COMMENT '操作時間',
`IS_SUCCESS` char(1) DEFAULT NULL COMMENT '是否成功(0-失敗,1-成功)',
`EXE_TYPE` char(1) DEFAULT NULL COMMENT '執行方式(單次執行-1,批量執行-2,定時執行-3)',
`REQUEST_FILE_NAME` varchar(100) DEFAULT NULL COMMENT 'jmeter配置文件名',
`RESULT_FILE_NAME` varchar(100) DEFAULT NULL COMMENT '執行結果文件名',
`RESULT_DATA` longtext COMMENT '執行結果數據',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8 COMMENT='jmeter執行日誌表';
public class TmpJmeterExeLogPo implements Serializable {
private Integer id;
private Integer jmeterCaseId;
private String resultData; //longtext 對應的java字段類型爲String
選擇這種方式落庫的特點在於,查看文本內容不需要解析,讀出來即可用,或者直接從數據庫表就能查看;
至於 longtext 與 longblob 兩種數據類型性能上的優缺點對比以及其他區別需要再學習,也歡迎大家留言討論。