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

相關文章
相關標籤/搜索