H2 script STRINGDECODE

MYSQL 导出 到 H2

近期想将开发中系统的数据库随身携带,以便随时学习。最好的办法固然是将数据库随身携带,因此想到了导出到H2中。H2的压缩模式很厉害,在MYSQL中1G左右的空间,压缩后占用六、7M。很是适合将数据导出H2中随时启动以查看表结构。
因为MYSQL的导出SQL不标准,没法直接导入到H2中,因此我写了以下脚本将将MYSQL转化为H2脚本。 mysql

mysqldump --add-drop-table=FALSE --add-locks=FALSE --lock-tables=FALSE --quote-names=FALSE --set-charset=FALSE --comments=FALSE -uroot -proot riil_product > mysql.sql
sed '/^\/\*!.*\*\/;/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)”分支删除便可。 sql

相关文章
相关标签/搜索