达梦数据库注意事项

demongao
1
2026-03-06

1. 达梦数据库不支持在 WHERE 子句中直接使用表别名(CLR)来引用列。在达梦中,表别名只能在 FROM 子句中使用,而不能在 WHERE 子句中使用。

错误用法:

SELECT "clr"."ID",
       "clr"."DELETED_AT",
       "clr"."RECORD_ID",
       "clr"."USERNAME",
       "clr"."USER_ID",
       "clr"."EVENT_TIME",
       "clr"."STATUS",
       "clr"."IP",
       "clr"."TOKEN_ID",
       "clr"."REASON",
       "clr"."ERRS"
  FROM bz25i_customer_login_record
  JOIN (SELECT "USER_ID",
                MAX(EVENT_TIME) AS max_event_time
           FROM bz25i_customer_login_record
          WHERE (USER_ID IN ('b079d03cbad046dda528191a5d7df167',
                             'a879ac872f674f2fa2bf5ad615abadd2',
                             '6580f0bd2c6842ef9ea884d1c0ba8c04',
                             '0480b3b80f0b415dbfe963b28ee267fc',
                             'bbc7e624916c44ab99e0883f722e450b') )
            AND (DELETED_AT IS NULL)
       GROUP BY "USER_ID") AS latest
    ON bz25i_customer_login_record.USER_ID = latest.USER_ID
   AND bz25i_customer_login_record.EVENT_TIME = latest.max_event_time
 WHERE (clr."DELETED_AT" IS NULL)
   AND "clr"."DELETED_AT" IS NULL

正确用法:

SELECT bz25i_customer_login_record."ID",
       bz25i_customer_login_record."DELETED_AT",
       bz25i_customer_login_record."RECORD_ID",
       bz25i_customer_login_record."USERNAME",
       bz25i_customer_login_record."USER_ID",
       bz25i_customer_login_record."EVENT_TIME",
       bz25i_customer_login_record."STATUS",
       bz25i_customer_login_record."IP",
       bz25i_customer_login_record."TOKEN_ID",
       bz25i_customer_login_record."REASON",
       bz25i_customer_login_record."ERRS"
  FROM bz25i_customer_login_record
  JOIN (SELECT "USER_ID",
                MAX(EVENT_TIME) AS max_event_time
           FROM bz25i_customer_login_record
          WHERE (USER_ID IN ('b079d03cbad046dda528191a5d7df167',
                             'a879ac872f674f2fa2bf5ad615abadd2',
                             '6580f0bd2c6842ef9ea884d1c0ba8c04',
                             '0480b3b80f0b415dbfe963b28ee267fc',
                             'bbc7e624916c44ab99e0883f722e450b') )
            AND (DELETED_AT IS NULL)
       GROUP BY "USER_ID") AS latest
    ON bz25i_customer_login_record.USER_ID = latest.USER_ID
   AND bz25i_customer_login_record.EVENT_TIME = latest.max_event_time
 WHERE bz25i_customer_login_record."DELETED_AT" IS NULL

2. 达梦数据库VARCHAR类型字符长度与MySQL不一致

达梦数据库varchar 可以设计单位 byte 和 char

varchar(50) 约等于16个汉字 + 2个英文数字

varchar(50 char) 50个汉字