场景:由于我们后端需要兼容多套数据库,如MySQL、金仓、达梦等数据库,在编写sql的时候,需要统一规范

  1. like语法使用单引号,如,like '%有线%'

  2. 不允许使用数据库关键字作为表字段,常见关键字:

    • order

    • admin

    • domain

    • current

    解决方案:开发过程中,各大数据库关键字不统一且繁多,难免会用到意想不到的关键字,所以字段统一加上公司名称前缀,xw_order、xw_admin

  3. 查询字段不允许双引号、单引号包裹,如,

    SELECT vc_direct AS `direct`
    
    SELECT vc_direct AS 'direct'
    
  4. 禁止使用date_sub函数

    date_sub(date,INTERVAL expr type)

    达梦数据库中,expr 需要加单引号
    如:date_sub(now(),interval '6' month)

    金仓数据库需要换成 ADD_MONTHS(SYSDATE,-6)

  5. 不推荐使用if函数

    否则必须做兼容,如:if(?3 is not null, direct = ?3, 1 = 1)),需要转换成if(?3 is not null, if(direct = ?3, 1, 0), 1)

  6. 建表字段不允许驼峰,需要隔开使用下划线_

  7. 不允许使用CONVERT(‘中文’ USING utf8mb4) COLLATE utf8mb4_general_ci,utf8mb4只有mysql有

  8. 不推荐使用case when函数

    反例sql

    SELECT *
    FROM s_sg_area s
    WHERE
        case
        when true
        then s.area_code = '440111015004'
        else s.area_type = '03'
        end
    

    一定要使用的话,then和else不能出现等号=

  9. 数据库时间字段类型一律使用datetime,禁用timestamp、time、varchar;

    代码层面推荐使用LocalDateTime,做为时间字段的接收或者传入类型

  10. 总结

    • 不要使用某个数据库独有的函数(可以永远不要用函数,可以代码层面处理的就不在数据库里处理)

    • 不使用数据库关键字做字段

    • 不在sql层面做逻辑判断

    • 时间类型要用对,加减时间在代码层面处理

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐