package com.alibaba.druid.sql.parser; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import junit.framework.TestCase; import org.junit.Assert; import java.util.List; /** * Created by tianzhen.wtz on 2015/10/31. * 类说明: */ public class MySQLCharSetTest extends TestCase{ public void testCreateCharset(){ String targetSql="CREATE TABLE `test_idb`.`acct_certificate` (\n" + " `id` bigint(20) NOT NULL auto_increment COMMENT '',\n" + " `nodeid` varchar(5) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT '',\n" + " `certificatetype` char(1) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT '',\n" + " `certificateno` varchar(32) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT '',\n" + " PRIMARY KEY(`id`),\n" + " INDEX `id_acct_certificate_nodeid`(`nodeid`),\n" + " INDEX `id_acct_certificate_certificateno`(`certificateno`)\n" + "\n" + ") engine= InnoDB DEFAULT CHARSET= `gbk` DEFAULT COLLATE `gbk_chinese_ci` comment= '' ;"; String resultSql="CREATE TABLE `test_idb`.`acct_certificate` (\n" + "\t`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '', \n" + "\t`nodeid` varchar(5) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT '', \n" + "\t`certificatetype` char(1) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT '', \n" + "\t`certificateno` varchar(32) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT '', \n" + "\tPRIMARY KEY (`id`), \n" + "\tINDEX `id_acct_certificate_nodeid`(`nodeid`), \n" + "\tINDEX `id_acct_certificate_certificateno`(`certificateno`)\n" + ") ENGINE = InnoDB CHARSET = `gbk` COLLATE = `gbk_chinese_ci` COMMENT = ''"; equal(targetSql, resultSql); } public void testAlterCharset(){ String targetSql="ALTER TABLE acct_certificate MODIFY COLUMN `nodeid` varchar(5) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT ''"; String resultSql="ALTER TABLE acct_certificate\n" + "\tMODIFY COLUMN `nodeid` varchar(5) CHARSET `gbk` COLLATE `gbk_chinese_ci` NULL COMMENT ''"; equal(targetSql, resultSql); } private void equal(String targetSql,String resultSql){ MySqlStatementParser parser=new MySqlStatementParser(targetSql); List<SQLStatement> sqlStatements = parser.parseStatementList(); System.out.println(sqlStatements.get(0).toString()); Assert.assertTrue(sqlStatements.get(0).toString().equals(resultSql)); } }