MySQL 兼容性

词法兼容

Oscar与MySQL的对比:

符号 OSCAR MySQL
' 限定符 限定符
" 标识符 限定符
` 标识符 标识符
  • 在MySQL中双引号(")、单引号(')都用作限定符,限定字符串常量, 反单引号(`)作为标识符,用于使用特殊字符、区分大小写等场景
  • 在Oscar中使用单引号(')用作限定符,限定字符串常量,双引号(")作为标识符,用于使用特殊字符、区分大小写等场景

提供参数 ENABLE_MYSQL_QUOTE 兼容 MySQL 词法,该参数默认不开启,开启后 双引号(")用于标记限定符。 反单引号(`)作为标识符,该符号不受 ENABLE_MYSQL_QUOTE 参数影响

此参数仅建议在迁移mysql时开启,其余情况谨慎开启,开启后可能会导致其他语法解析问题

示例

set ENABLE_MYSQL_QUOTE=TRUE;

DROP SCHEMA `DEBUGOP` CASCADE;

CREATE SCHEMA `DEBUGOP`;

CREATE TABLE `DEBUGOP`.`TESTTABLE`(`COL1` INT,`NAME` TEXT);

INSERT INTO `DEBUGOP`.`TESTTABLE` VALUES(1,'TESTNAME');
INSERT INTO `DEBUGOP`.`TESTTABLE` VALUES(2,"TESTNAME");
INSERT INTO `DEBUGOP`.`TESTTABLE` VALUES(3,"TEST");
INSERT INTO `DEBUGOP`.`TESTTABLE` VALUES(4,'TEST');


SELECT * FROM `DEBUGOP`.`TESTTABLE` WHERE `NAME`="TESTNAME" ORDER BY `COL1`;
COL1(int)      |NAME(text)      |
-------------------------------
1              |TESTNAME        |
-------------------------------
2              |TESTNAME        |
总数目:2

UPDATE `DEBUGOP`.`TESTTABLE` SET `NAME`='TESTNAME' WHERE NAME='TEST';
	

DELETE `DEBUGOP`.`TESTTABLE` WHERE NAME='TESTNAME';

SELECT * FROM `DEBUGOP`.`TESTTABLE` WHERE `NAME`="TESTNAME" ORDER BY `COL1`;
COL1(int)      |NAME(text)      |
总数目:0


create or replace function `DEBUGOP`.`f1`(a int) return number is
	r number;
begin
	r := a * a;
	return r;
end;

/

select `DEBUGOP`.`f1`(3);
f1(numeric)      |
-----------------
9                |
总数目:1

	
create or replace procedure  `DEBUGOP`.`myadd`(a int,b int) as
    c int;
begin
    c = a+b;
    dbms_output.put_line('和为:' || c);

end;
/

EXEC `DEBUGOP`.`myadd`(3,5);