民航电子数据库:mysql与cae建表语法差异
目录
- 一、场景
- 二、语法差异
一、场景
1、使用CAEMigrator-1.0.exe
将mysql数据库迁移至cae数据库时,迁移速度非常慢,而且容易卡死(可能是部署cae数据库的服务器资源不足导致)
2、所以将mysql数据库导出为sql脚本,通过CAEManager-V1.0.exe
工具进行sql脚本导入
3、但mysql的语法与cae的语法是有差异的,需要调整sql脚本语法
二、语法差异
使用SQL脚本导入数据时,SQL脚本不能有注释,否则导入会失败,可以在notepad++使用^.*-- .*\r?\n来去除注释行无法在创建表的时候添加普通约束
KEY `ACT_FK_BYTEARR_DEPL` (`DEPLOYMENT_ID_`) ==》 删除这一行
CONSTRAINT `ACT_FK_BYTEARR_DEPL` CHECK(`DEPLOYMENT_ID_`) ==》 删除这一行
INDEX `FK_Reference_2`(`BusiFirCode`) USING BTREE ==》 删除这一行
UNIQUE INDEX `IX_T_3RDAUTH_AuthToken`(`AuthorizerAppid`) ==》 删除这一行
FULLTEXT INDEX `idx_Address`(`Cus_Address`) ==》 删除这一行只能在表创建成功之后添加
-- Alter Table Add ForeignKey Constraint --
alter table ICIP6_BAK.ACT_GE_BYTEARRAY add constraint ACT_FK_BYTEARR_DEPL foreign key(DEPLOYMENT_ID_) references ICIP6_BAK.ACT_RE_DEPLOYMENT(ID_) on update restrict on delete restrict;
-- Create Table Index --
create index "ACT_FK_BYTEARR_DEPL" on ICIP6_BAK.ACT_GE_BYTEARRAY("DEPLOYMENT_ID_") indextype is btree global ;创建表时指定自增主键值
AUTO_INCREMENT = 54 ==》 删掉
`id` Integer NOT NULL AUTO_INCREMENT, ==》 `id` Integer IDENTITY(54,1) NOT NULL,
注意:identity(1,1)要紧跟在Int或integer后自动更新日期
`DEPLOY_TIME_` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ==》 `DEPLOY_TIME_` timestamp AUTO UPDATE日期不支持'0000-00-00 00:00:00'设置默认值
1、删掉默认值:`InitializeTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '初始化时间' ==》 `InitializeTime` datetime NOT NULL COMMENT '初始化时间'
2、替换默认值:`InitializeTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '初始化时间' ==》 `InitializeTime` datetime NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '初始化时间'按范围分区
PARTITION BY RANGE COLUMNS (`InitializeTime`)
PARTITIONS 240
(PARTITION `p201101` MAX_ROWS = 0 MIN_ROWS = 0,
(PARTITION `p201102` MAX_ROWS = 0 MIN_ROWS = 0)替换成以下写法PARTITION BY RANGE (`InitializeTime`) INTERVAL 1 MONTH -- INTERVAL 1 MONTH是按月进行分区
PARTITIONS(part1 VALUES LESS THAN('2011-01'),part2 VALUES LESS THAN('2011-02'))创建表时不能指定数据库引擎及字符编码
ENGINE = InnoDB、DEFAULT CHARSET=utf8、COLLATE=utf8_bin、CHARSET utf8、COLLATE utf8_bin ==》 删除这些声明不支持ROW_FORMAT
ROW_FORMAT = COMPACT ==》 删掉不支持UNSIGNED
UNSIGNED ==》 删掉不支持USING BTREE
USING BTREE ==》 删掉不支持zerofill
zerofill ==》 删掉不支持CHARACTER
varchar(50) CHARACTER ==> varchar(50)不支持“SET utf8”
SET utf8 ==》 删掉创建表如果进行分区,不能使用sql脚本导入功能,但可以放到工具CAEManage里边执行不支持MEDIUMTEXT、longtext,使用clob代替
MEDIUMTEXT ==》 clob
longtext ==》 clob不支持longblob、mediumblob,使用blob代替
longblob ==》 blob表描述格式调整,去掉=号,如:
comment='按下VDN设置的取消ACD排队的DTMF键后,需进行' ==> comment '按下VDN设置的取消ACD排队的DTMF键后,需进行'插入blob、clob数据
1、manager只支持手动插入blob
2、在console用下面的语法
create table test(a blob);
insert into test values(?); <# C:\t1.png;二进制数据不能直接insert,得使用上面那种语法插入
0x00000000000000000000000000000000000000000000000000000000 ==》 删掉
数据流不能直接insert,得使用上面那种语法插入
0x63657368695F3120E5A484E79086E5AE8CE68890EFBC8CE8AFB7E5AEA1E689B9E38082 ==》 删掉不支持double(10, 2)
double(10, 2) ==》 double不支持tinyint(4)
tinyint(4) ==》 tinyint不支持bigint(4)
bigint(4) ==》 bigint不支持smallint(4)
smallint(4) ==》 smallint不支持int(4)
int(4) ==》 int不支持bit(1)
bit(1) ==》 boolean不支持bit(m),m > 1
bit(m) ==》 BINARY插入bit类型时,需要把字符b去掉
INSERT INTO `xxx` VALUES (b'0'); ==》 INSERT INTO `xxx` VALUES ('0');