SQL大小写规范和 sql_mode

  • 一、SQL大小写规范
    • 1、Windows和Linux平台区别
    • 2、Linux下大小写规则设置
    • 3、SQL编写建议
  • 二、sql_mode的合理设置(了解即可,一般不动)
    • 1、 宽松模式 vs 严格模式
    • 2、模式查看和设置

一、SQL大小写规范

1、Windows和Linux平台区别

在 SQL 中,关键字和函数名是不用区分字母大小写的,比如 SELECT、WHERE、ORDER、GROUP BY 等关键字,以及 ABS、MOD、ROUND、MAX 等函数名。

不过在 SQL 中,你还是要确定大小写的规范,因为在 Linux 和 Windows 环境下,你可能会遇到不同的大小写问题。 windows系统默认大小写不敏感 ,但是linux系统是大小写敏感的

通过如下命令查看

SHOW VARIABLES LIKE '%lower_case_table_names%'
  • Windows系统下:
  • Linux系统下:
  • lower_case_table_names参数值的设置:
    • 默认为0,大小写敏感
    • 设置1,大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于sql语句都是转换为小写对表和数据库进行查找。
    • 设置2,创建的表和数据库依据语句上格式存放,凡是查找都是转换为小写进行
  • 两个平台上SQL大小写的区别具体来说:

下面这个记住

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名、表名、表的别名、变量名是严格区分大小写的;
2、关键字、函数名称在 SQL 中不区分大小写;
3、列名(或字段名)与列的别名(或字段别名)在所有的情况下均是忽略大小写的;

MySQL在Windows的环境下全部不区分大小写

2、Linux下大小写规则设置

当想设置为大小写不敏感时,要在 my.cnf 这个配置文件[mysqld] 中加入
lower_case_table_names=1然后重启服务器。

  • 但是要在重启数据库实例之前就需要将原来的数据库和表转换为小写,否则将找不到数据库名。

  • 此参数适用于MySQL5.7。在MySQL 8下禁止在重新启动 MySQL 服务时将lower_case_table_names 设置成不同于初始化 MySQL 服务时设置的lower_case_table_names 值。

如果非要将MySQL8设置为大小写不敏感,具体步骤为:

1、停止MySQL服务
2、删除数据目录,即删除 /var/lib/mysql 目录
3、在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1
4、启动MySQL服务

3、SQL编写建议

1. 关键字和函数名称全部大写;
2. 数据库名、表名、表别名、字段名、字段别名等全部小写;
3. SQL 语句必须以分号结尾。

数据库名、表名和字段名在 Linux MySQL 环境下是区分大小写的,因此建议你统一这些字段的命名规则,比如全部采用小写的方式。

虽然关键字和函数名称在 SQL 中不区分大小写,也就是如果小写的话同样可以执行。但是同时将关键词和函数名称全部大写,以便于区分数据库名、表名、字段名。

二、sql_mode的合理设置(了解即可,一般不动)

1、 宽松模式 vs 严格模式

宽松模式

如果设置的是宽松模式,那么我们在插入数据的时候,即便是给了一个错误的数据,也可能会被接受,并且不报错。

举例:我在创建一个表时,该表中有一个字段为name,给name设置的字段类型时 char(10),如果我在插入数据的时候,其中name这个字段对应的有一条数据的 长度超过了10 ,例如'1234567890abc',超过了设定的字段长度10,那么不会报错,并且取前10个字符存上,也就是说你这个数据被存为了'1234567890',而'abc'就没有了。但是,我们给的这条数据是错误的,因为超过了字段长度,但是并没有报错,并且mysql自行处理并接受了,这就是宽松模式的效果。

应用场景 :通过设置sql mode为宽松模式,来保证大多数sql符合标准的sql语法,这样应用在不同数据库之间进行 迁移 时,则不需要对业务sql 进行较大的修改。

严格模式

出现上面宽松模式的错误,应该报错才对,所以MySQL5.7版本就将sql_mode默认值改为了严格模式。所以在 生产等环境 中,我们必须采用的是严格模式,进而 开发、测试环境 的数据库也必须要设置,这样在开发测试阶段就可以发现问题。并且我们即便是用的MySQL5.6,也应该自行将其改为严格模式。

开发经验 :MySQL等数据库总想把关于数据的所有操作都自己包揽下来,包括数据的校验,其实开发中,我们应该在自己 开发的项目程序级别将这些校验给做了 ,虽然写项目的时候麻烦了一些步骤,但是这样做之后,我们在进行数据库迁移或者在项目的迁移时,就会方便很多。

改为严格模式后可能会存在的问题:

若设置模式中包含了 NO_ZERO_DATE ,那么MySQL数据库不允许插入零日期,插入零日期会抛出错误而不是警告。例如,表中含字段TIMESTAMP列(如果未声明为NULL或显示DEFAULT子句)将自动分配DEFAULT ‘0000-00-00 00:00:00’(零时间戳),这显然是不满足sql_mode的NO_ZERO_DATE而报错。

2、模式查看和设置

查看当前的sql_mode

select @@session.sql_mode select @@global.sql_mode #或者
show variables like 'sql_mode';

临时设置方式:设置当前窗口中设置sql_mode

SET GLOBAL sql_mode = 'modes...'; #全局 SET SESSION sql_mode = 'modes...'; #当前会话

举例:

#改为严格模式。此方法只在当前会话中生效,关闭当前会话就不生效了。
set SESSION sql_mode='STRICT_TRANS_TABLES';
#改为严格模式。此方法在当前服务中生效,重启MySQL服务后失效。
set GLOBAL sql_mode='STRICT_TRANS_TABLES';

永久设置方式:在/etc/my.cnf中配置sql_mode

在my.cnf文件(windows系统是my.ini文件),新增

[mysqld] sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR _DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

然后 重启MySQL

当然生产环境上是禁止重启MySQL服务的,所以采用 临时设置方式 + 永久设置方式来解决线上的问题,那么即便是有一天真的重启了MySQL服务,也会永久生效了。

(二)SQL大小写规范和 sql_mode相关推荐

  1. 0基础学MySQL数据库—从小白到大牛(20)大小写规范、sql_mode的合理设置

    文章目录 一.SQL大小写规范 Windows和Linux平台区别 Linux下大小写规则设置 SQL编写建议 二.sql_mode的合理设置 介绍 宽松模式 vs 严格模式 模式查看和设置 一.SQ ...

  2. 【宋红康 MySQL数据库 】【高级篇】【02】MySQL字符集、比较规则、大小写规范、sql_mode

    持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][02]MySQL字符集.比较规则.大小写规范.sql_mode 默认字符集 MySQL8 MySQL5 修改 ...

  3. MySQL高级篇——字符集、大小写规范和sql_mode

    Mysql字符集 在mysql8.0之前,server默认字符集为latin1,utf8字符集指向的是utf8mb3.在mysql8.0开始,数据库的默认编码就改为utf8mb4. 1. 修改字符集 ...

  4. 【Mysql】Mysql SQL 大小写规范

    目录 前言 Linux 大小写规则 Linux 下大小写设置 1.查询是否区分大小写 2.Mysql 5.7 版本 Linux 修改大小写设置 3.Mysql 8.0 版本 Linux 修改大小写设置 ...

  5. MySQL高级篇01【字符集、SQL规范和sql_mode设置】

    目录 1. 字符集操作 1.1 修改MySQL5.7字符集 1. 修改步骤 2.已有库/表字符集的变更 1.2 字符集级别分类 1. 服务器级别 2. 数据库级别 3. 表级别 4. 列级别 5. 小 ...

  6. oracle系统开发规范,SQL编写规范与优化(适用于Oracle).ppt

    <SQL编写规范与优化(适用于Oracle).ppt>由会员分享,可在线阅读,更多相关<SQL编写规范与优化(适用于Oracle).ppt(23页珍藏版)>请在装配图网上搜索. ...

  7. K3Cloud二次开发规范-1

    K/3Cloud****二次开发规范 文章目录 **K/3Cloud****二次开发规范** **1.** **简介** **1.1.** **目的** **1.2.** **范围** **1.3.* ...

  8. 导学+初识MySQL+SQL语法规范+数据库相关操作+表相关操作+MySql存储引擎介绍+MySQL表的创建+测试数据类型

    一.导学 1.什么是SQL? 结构化查询语言,数据库管理系统通过SQL语言来管理数据库中的数据: 2.SQL语言组成部分 (1)DDL--数据定义语言,主要定义数据库.表.视图.索引和触发器等 (2) ...

  9. sql大小写 效率_【SQL】单行函数

    字符处理函数 字符串大小写处理函数 lower(char) 将所给字符串char全部转换为小写 SQL> select lower('ChAr') from dual; LOWE----char ...

最新文章

  1. 【转】android错误 aapt.exe已停止工作的解决方法
  2. maven的pom.xml中profiles的作用
  3. JavaWeb——通过Listener理解域对象生命周期
  4. 交换第六天——HSRP、VRRP、GLBP、SPAN
  5. RocketMQ-docker镜像的制作与部署
  6. 【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)
  7. 13 Process Lifecycle: Process Creation and Termination
  8. Dijkstra求最短路径例题
  9. win10卸载电脑管家就蓝屏_新电脑WIN10出现蓝屏 系统重装也不行
  10. 《白帽子讲web安全》学习笔记 (4)
  11. 阿里 java ide_纯JAVA版JAVA IDE环境(源码)
  12. Eucalyptus详解
  13. android打开cad文件怎么打开方式,dwg文件怎么打开_手机上dwg文件用什么程序可以打开...
  14. A problem occurred configuring root project ‘xxx‘.
  15. 【gcc/g++】1.编译器, 编译过程和基本参数
  16. Oracle EBS R12 创建会计科目失败诊断和处理
  17. vue组件孙子调用爷爷的方法
  18. mysql 重量 什么类型_航空货物运输中的计费重量,指货物毛重与体积重量中的高者。...
  19. 微信小程序 pages使用
  20. MySQL实战45讲学习笔记

热门文章

  1. XposedInstaller框架未安装解决方法-ADB shell 离线安装-2023年-安卓 Android 6
  2. js判断是否是微信浏览器或者支付宝浏览器
  3. 使用flask,关于WARNING: This is a development server. Do not use it in a production deployment问题
  4. git命令创建分支|合并分支|删除分支
  5. 计算机的当前应用程序,高一计算机考试,急!(重赏)
  6. vivo x fold多少钱 vivo x fold值得买吗
  7. untiy 解析json
  8. python利用turtle库绘制多边形
  9. AirPods 无法充电怎么办?AirPods 无法充电的解决方法
  10. 实时响应数据之短轮询和长轮询