更新时间:2024-05-14 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不区分。