TypechoJoeTheme

Weclome to TTP

统计

MySQL sql_mode查看和设置

TTP博主
2022-07-12
/
0 评论
/
242 阅读
/
373 个字
/
百度已收录
07/12
本文最后更新于2022年07月18日,已超过140天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

MySQL sql_mode查看和设置


查看sql_mode的配置

  • 查看当前sql_mode

    mysql>select @@GLOBAL.sql_mode;
    +--------------------------------------------+
    | @@GLOBAL.sql_mode                          |
    +--------------------------------------------+
    | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
    +--------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT @@SESSION.sql_mode;
    +--------------------------------------------+
    | @@SESSION.sql_mode                         |
    +--------------------------------------------+
    | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
    +--------------------------------------------+
    1 row in set (0.00 sec)
  • 查看配置文件里的sql_mode

    vim /etc/my.cnf
    [mysqld]
    #set the SQL mode to strict
    #sql_mode="modes..." 
    sql_mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
  • 设置当前的sql_mode

    SET GLOBAL sql_mode = 'modes...';
    SET SESSION sql_mode = 'modes...';

sql_mode常用值

  • ONLY_FULL_GROUP_BY

    • 对于GROUP BY聚合sql操作,如果在select中的列,没有在GROUP BY中出现,则判定此sql不合法,因为列不在GROUP BY的从句中。
  • NO_AUTO_VALUE_ON_ZERO

    • 此sql_mode影响自增列的插入,默认设置下,插入0或NULL表示下一个值自增,如果用户希望插入值为0,且该列又是自增,则此参数就有用了。
  • STRICT_TRANS_TABLES

    • 此模式下,如果一个值不能插入到一个事务表中,则中断当前操作,对非事务表不做限制。
  • NO_ZERO_IN_DATE

    • 在此模式下,不允许日期和月份数据为0
  • NO_ZERO_DATE

    • 此模式下,mysql数据库不允许插入零日期,插入0日期会抛出错误,而不是警告。
  • ERROR_FOR_DIVISION_BY_ZERO

    • 在insert或update过程中,如果数据被清除,会产生错误而非警告;如果不设置,则数据清除时MySQL会返回NULL
  • NO_AUTO_CREATE_USER

    • 禁止GRANT创建密码为空的用户
  • NO_ENGINE_SUBSTITUTION

    • 如果需要的存储引擎被禁用或未编译,会抛出错误;如果不设置,则会使用默认的引擎代替,并抛出一个异常
  • PIPES_AS_CONCAT

    • 将"||"视为字符串的连接操作符,而非或运算符;这和Oracle数据库是一样的,也和字符拼接函数Concat类似。
  • ANSI_QUOTES

    • 启用ANSI_QUOTES,不能用双引号来引用字符串,会被解释为识别符

Oracle相关sql_mode设置

  • Oracle的sql_mode设置等同MySQL:PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER

  • 如果使用MySQL,为了继续保留使用Oracle的习惯,可以修改mysql的sql_mode

    [mysqld]
    sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'
mysql
朗读
赞(0)
版权属于:

Weclome to TTP

本文链接:

https://ttpc.asia/archives/178/(转载时请注明本文出处及文章链接)

评论 (0)
本篇文章评论功能已关闭
IP信息

标签云

最新回复

暂无回复