更新时间:2024-11-26 GMT+08:00
标识符
M-Compatibility模式下标识符存在以下差异:
- GaussDB无引号标识符中不支持以美元符号($)开头,MySQL无引号标识符中支持。
- GaussDB无引号标识符中的支持大小写敏感的数据库对象。
- GaussDB标识符支持U+0080~U+00FF扩展字符,MySQL标识符支持U+0080~U+FFFF的扩展字符。
- 无引号标识符中,GaussDB不支持创建以数字开头包含一个e或E结尾作为标识符的表,例如:
-- GaussDB报错不支持,MySQL支持 m_db=# CREATE TABLE 23e(c1 int); ERROR: syntax error at or near "23" LINE 1: CREATE TABLE 23e(c1 int); ^ m_db=# CREATE TABLE t1(23E int); ERROR: syntax error at or near "23" LINE 1: CREATE TABLE t1(23E int); ^
- 有引号标识符中,GaussDB对于创建了列名为纯数字或科学计算法的表,不支持直接使用,需要在引号中使用;对于点操作符(.)场景,列名为纯数字或科学计算法的表也需要在引号中使用。例如:
-- 创建列名为纯数字或科学计算法的表 m_db=# CREATE TABLE t1(`123` int, `1e3` int, `1e` int); CREATE TABLE -- 向表中插入数据 m_db=# INSERT INTO t1 VALUES(7, 8, 9); INSERT 0 1 -- 结果非预期,但与MySQL结果一致 m_db=# SELECT 123 FROM t1; ?column? ---------- 123 (1 row) -- 结果非预期,但与MySQL结果一致 m_db=# SELECT 1e3 FROM t1; ?column? ---------- 1000 (1 row) -- 结果非预期,并且与MySQL结果不一致 m_db=# SELECT 1e FROM t1; e --- 1 (1 row) -- 正确用法 m_db=# SELECT `123` FROM t1; 123 ----- 7 (1 row) m_db=# SELECT `1e3` FROM t1; 1e3 ----- 8 (1 row) m_db=# SELECT `1e` FROM t1; 1e ---- 9 (1 row) -- 点操作符的场景,GaussDB不支持,MySQL支持 m_db=# SELECT t1.123 FROM t1; ERROR: syntax error at or near ".123" LINE 1: SELECT t1.123 FROM t1; ^ m_db=# SELECT t1.1e3 FROM t1; ERROR: syntax error at or near "1e3" LINE 1: SELECT t1.1e3 FROM t1; ^ m_db=# SELECT t1.1e FROM t1; ERROR: syntax error at or near "1" LINE 1: SELECT t1.1e FROM t1; ^ -- 点操作符的场景,正确用法: m_db=# SELECT t1.`123` FROM t1; 123 ----- 7 (1 row) m_db=# SELECT t1.`1e3` FROM t1; 1e3 ----- 8 (1 row) m_db=# SELECT t1.`1e` FROM t1; 1e ---- 9 (1 row) m_db=# DROP TABLE t1; DROP TABLE
- GaussDB分区名使用双引号(需要设置SQL_MODE为ANSI_QUOTES)或反引号是区分大小写的,MySQL不区分。
- MySQL标识符长度限制为64字符,而GaussDB标识符长度限制为63字节。超过标识符的长度限制后,MySql报错,GaussDB会对标识符截断并告警。
- GaussDB不支持可执行注释。
父主题: SQL