• MySQL-大小写规范及sql_mode设置


    一、SQL大小写规范

    1、在SQL中,关键字和函数名是不缺分字母大小写的,但是在不同平台可能会遇到大小写问题,以 window 和 Linux为例,window下大小写是不敏感的,而在linux下 大小写是敏感的,可通过以下命令查看:

    • windows下:
    mysql> show variables like '%lower_case_table_names%';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_table_names | 1     |
    +------------------------+-------+
    1 row in set, 5 warnings (1.20 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • linux下:
    mysql> show variables like '%lower_case_table_name%';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_table_names | 0     |
    +------------------------+-------+
    1 row in set (1.19 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、lower_case_table_names 参数说明:

    • 默认为 0 ,表示 大小写敏感
    • 设置为1,表示 大小写不敏感,创建 数据库表都是以小写存放,对sql语句也是转换为小写进行查找
    • 设置为2,表示 在创建数据库表时依据创建语句格式进行存放,查找时转换为小写格式进行处理

    3、在linux下大小写规范说明

    • 数据库、表名、表的别名、变量名 是严格区分大小写的
    • 关键字、函数名 不区分大小写
    • 列名(列的别名) 在任何情况下均忽略大小写

    4、Linux下设置大小写不敏感,执行以下语句,并添加 lower_case_table_names=1,重启服务

    [root@rqtanc ~]# vim /etc/my.cnf
    [root@rqtanc ~]# systemctl restart mysqld.service
    
    • 1
    • 2

    二、sql_mode设置

    1、sql_mode 会影响MySQL支持的语法以及它执行的 数据验证检查 。通过设置sql_mode可以完成不同严格程度的校验,有效的保证数据的准确性。

    2、模式查看和设置
    2.1、查看

    mysql> SHOW VARIABLES LIKE 'sql_mode';
    +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
    | Variable_name | Value                                                                                                                                     |
    +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
    | sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.12 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2、设置

    • set global sql_mode = ‘相关值’;
    • set session sql_mode= ‘相关值’;
    • 永久设置,操作如下:
    #启用编辑
    [root@rqtanc ~]# vim /etc/my.cnf
    
    #添加
    sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    #重启服务
    [root@rqtanc ~]# systemctl restart mysqld.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、sql_mode常用值

    常用值说明
    STRICT_TRANS_TABLES在严格模式下处理事务表。在这种模式下,任何插入、更新或删除操作都会导致错误,如果数据不符合表的定义或不符合相关约束
    NO_AUTO_CREATE_USER禁止使用 GRANT 命令自动创建用户。
    NO_ENGINE_SUBSTITUTION如果指定的存储引擎不可用,则会生成错误而不是使用默认的存储引擎。
    ONLY_FULL_GROUP_BY启用严格的 SQL 模式,要求 GROUP BY 子句中的列必须是 SELECT 列表中的非聚合列或聚合函数。
    ERROR_FOR_DIVISION_BY_ZERO在严格模式下,对于除零错误会产生错误而不是警告。
    NO_ZERO_DATE禁止日期或日期时间列插入 ‘0000-00-00’。如果启用,这将生成错误。
    NO_ZERO_IN_DATE禁止 ‘0000-00-00’ 格式的日期或日期时间值。
    ANSI_QUOTES启用 ANSI_QUOTES 模式,使双引号成为标识符引用的引号字符,而不是单引号。
    IGNORE_SPACE允许空格后面的多个空格在比较时被忽略。
    PIPES_AS_CONCAT将 || 视为字符串连接运算符,而不是作为位操作符
  • 相关阅读:
    SQL的ROUND函数用法及其实例
    幻读是什么,幻读有什么问题
    Multi-View Learning(多视图学习/多视角学习 )是什么? Co-training(协同训练)和它的关系
    死循环:扣不到的广告余额,记一个生产问题
    2023年天津/辽宁/安徽/北京DAMA-CDGA/CDGP数据治理认证报名
    计算机毕业设计 | springboot+vue会议室管理系统(附源码)
    Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):4、Maven项目转换与pom.xml配置
    【cmake】利用cmake的add_subdirectory管理内部和外部库
    SparkSQL远程访问CDH集群Hive数据表
    页面首次被加载方法
  • 原文地址:https://blog.csdn.net/badBoy_badMan/article/details/138038436