博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
H2 script STRINGDECODE
阅读量:6671 次
发布时间:2019-06-25

本文共 1293 字,大约阅读时间需要 4 分钟。

hot3.png

MYSQL 导出 到 H2

近期想将开发中系统的数据库随身携带,以便随时学习。最好的办法当然是将数据库随身携带,所以想到了导出到H2中。H2的压缩模式很厉害,在MYSQL中1G左右的空间,压缩后占用6、7M。非常适合将数据导出H2中随时启动以查看表结构。

由于MYSQL的导出SQL不标准,无法直接导入到H2中,所以我写了如下脚本将将MYSQL转化为H2脚本。

mysqldump --add-drop-table=FALSE --add-locks=FALSE --lock-tables=FALSE --quote-names=FALSE --set-charset=FALSE --comments=FALSE -uroot -proot riil_product > mysql.sqlsed '/^\/\*!.*\*\/;/d;s/[ ]*ENGINE=.*DEFAULT[ ]CHARSET=[^ ^;]*[ ]*//g;s/double(\([0-9]*\),\([0-9]*\))/number(\1,\2)/g;s/ON UPDATE CURRENT_TIMESTAMP//g;s/ USING BTREE//g;/^\/\*!/,/\*\//d;/^SET/d;' mysql.sql|sed '/CREATE TABLE \([^ ]*\) (/{h};/^)COMMENT=/{G;s/\n//;s/^.*COMMENT=\([^;]*\)[;]*CREATE TABLE \([^ ]*\) ($/);\nCOMMENT ON TABLE \2 IS \1;/}' > h2.sql
其中最主要的是将表的COMMENT转化为H2格式,如:

CREATE TABLE IF NOT EXISTS `tb_log` (  `a_time` timestamp NOT NULL COMMENT '操作时间') ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='审计日志';/*!40101 SET character_set_client = @saved_cs_client */;-- 转化为 --CREATE TABLE tb_log (  a_time datetime NOT NULL COMMENT '操作时间',);COMMENT ON TABLE t_admin_audit_log IS '审计日志';

导出H2脚本STRINGDECODE解决

当导出H2时,所有中文变为STRINGDECODE,不方便查看,且不易导入到其它数据库中,可以修改H2代码来进行修正(建议生成补丁JAR文件,优先加载到classpath,方便以后删除),函数位置:org.h2.util.StringUtils.quoteStringSQL(String),将“else if (c < ' ' || c > 127)”分支删除即可。

转载于:https://my.oschina.net/wonder365/blog/109030

你可能感兴趣的文章