文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

国产数据库兼容过程中涉及的MySQL非严格模式

2024-11-30 05:56

关注

在国产数据库兼容适配过程中,经常遇到因源数据库是MySQL,迁移至其他国产数据库后,因MySQL端兼容模式有非严格模式,导致适配过程过程中需要做调整。那么,MySQL主要的非严格模式小结如下:

1、非严格模式参数

MySQL的非严格模式指的是在MySQL配置中禁用严格模式(Strict Mode)的情况下执行的SQL。在非严格模式下,MySQL会对某些数据插入、更新和比较操作执行隐式转换,从而在一些情况下允许执行一些宽松的操作,而不抛出错误或警告。
涉及的主要参数说明如下:

a) STRICT_TRANS_TABLES:在插入或更新数据时,禁止自动转换类型,确保所有数据都符合表定义的数据类型范围。如果值无法转换为合法的数据类型,则抛出错误。
b) STRICT_ALL_TABLES:对所有表都启用STRICT_TRANS_TABLES模式,确保数据插入或更新时严格符合表定义的数据类型。
c) NO_ZERO_IN_DATE:禁止在日期中使用零值,例如'0000-00-00',在严格模式下会被视为非法日期。
d) NO_ZERO_DATE:禁止使用零值表示日期的部分,例如'2000-00-00',在严格模式下会被视为非法日期。
e) ERROR_FOR_DIVISION_BY_ZERO:当除数为零时,抛出错误而不是返回NULL。
f) ANSI_QUOTES:启用ANSI_QUOTES模式,要求使用双引号来引用字符串,而不是MySQL默认的单引号。
g) NO_AUTO_CREATE_USER:禁止在GRANT语句中自动创建新用户。
h) NO_ENGINE_SUBSTITUTION:如果指定的存储引擎不可用,不允许MySQL使用默认的存储引擎替代。

2、简单举例

以下是一些非严格模式下可能出现的案例情况:

非严格的日期和时间插入:在非严格模式下,MySQL允许插入不符合日期和时间格式的值,会自动进行转换或舍入
eg:  不合法的日期值'0000-00-00'等

非严格的字符串插入:在非严格模式下,MySQL允许插入过长的字符串,会自动截断超过字段长度的部分 (建议已开启此类严格模式)
eg:   varchar(2) 类型的字段,插入ABC可以成功,插入结果为AB

非严格的数值插入:在非严格模式下,MySQL允许插入超出字段范围的数值,会自动进行范围调整(建议已开启此类严格模式)
eg:  TINYINT(默认最大127) 可以插入150,且插入后的值自动截断为 127

非严格的零值插入:在非严格模式下,MySQL允许插入字符串类型的值到数值类型字段,会将非数值字符串转换为0 (建议已开启此类严格模式)
eg:  例如可以将字符串'123' 插入int类型,结果是123;将'abc'插入int,结果是0

非严格的分组查询:在非严格模式下,MySQL允许在GROUP BY查询中选择非聚合列,这可能导致不确定的结果
eg:  SELECT   a,b,COUNT(*)  FROM  tb GROUP BY a

非严格的NULL值比较:在非严格模式下,MySQL允许使用普通比较运算符(如=、<、>等)与NULL值进行比较,这可能导致不确定的结果 (建议已开启此类严格模式)
eg:  column_name =NULL 或者 column_name <> NULL

非严格的外键约束:在非严格模式下,MySQL对外键约束的检查较为宽松,可能会允许插入或更新关联字段中不存在的值。(建议已开启此类严格模式)
eg:  tb表外键字段指向ta表的主键,如果tb表的外键字段插入的内容不存在于a表中时也可以写入成功

非严格的除数为0校验:在非严格模式下,MySQL允许除数为0
eg:  10/0 ,结果为null

非严格的字符串引号标识:在非严格模式下,MySQL允许单引号及双引号来引用字符串
eg: 'abc' 或 "abc"均可

非严格的grant模式自动创建用户:在非严格模式下,MySQL允许grant语句中如果用户不存在时自动创建用户
eg:  grant select  on db1)tb1 to test;

非严格的存储引擎自动替代:  在非严格模式下,MySQL允许指定的存储引擎不可用是使用默认的存储引擎替代
eg: create table tb2(id int primary key ) engin = aaa;

PS:还会有其他的非严格模式的组合以及不同数据库的兼容模式情况,大家可以继续探索。

来源:数据库干货铺内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯