zoukankan      html  css  js  c++  java
  • MySQL SQL_Mode

    sql_mode 定义了对 MySQL 中 SQL 语句语法的校验规则。

    sql_mode 是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。

    在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。

    sql_mode 常用的值

    ONLY_FULL_GROUP_BY 对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的,因为列不在 GROUP BY 从句中
    NO_AUTO_VALUE_ON_ZERO 该值影响自增长列的插入。默认设置下,插入 0 或 NULL 代表生成下一个自增长值。如果用户 希望插入的值为 0,而该列又是自增长的,那么这个选项就有用了
    STRICT_TRANS_TABLES 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
    NO_ZERO_IN_DATE 在严格模式下,不允许日期和月份为零
    NO_ZERO_DATE 设置该值,mysql 数据库不允许插入零日期,插入零日期会抛出错误而不是警告
    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 设置等同于 PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER

    查看和修改

    select @@sql_mode;

    临时修改

    set global @@sql_mode = ’’;

    永久修改,配置 my.cnf 文件,然后重启 MySQL

    [mysqld]
    sql_mode=''

    关于建表字段(varchar)长度

    Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

    可以通过临时关闭 MySQL 的严格模式来跳过。也就是 set global @@sql_mode = ’’;

    正常还是应该考虑表设计:https://dev.mysql.com/doc/refman/8.0/en/silent-column-changes.html

    单个字段如果大于 65535,则转换为 TEXT:

    • 单个字段长度:varchar(10000) ,字节数:10000*3(utf8)+(1 or 2) = 30000 ,小于65535,可以建立。
    • 单行记录长度:varchar(10000)*3,字节数:30000*3(utf8)+(1 or 2) = 90000,大于65535,不能建立,所以报错。

    单行最大限制为 65535,这里不包括 TEXT、BLOB:

    • 单个字段长度:varchar(30000) ,字节数:30000*3+(1 or 2) = 90000 , 大于 65535,需要转换成 TEXT,才可以建立。所以报 warnings。
    • 单行记录长度:varchar(30000)*3,因为每个字段都被转换成了 TEXT,而 TEXT 没有限制,所以可以建立表。

    https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html

    https://www.cnblogs.com/zhoujinyi/p/3178558.html

  • 相关阅读:
    [再寄小读者之数学篇](2014-10-27 无穷多个无穷小量相乘还是无穷小量么?)
    华中师范大学2012年数学分析考研试题参考解答
    本科时的课程与成绩
    2014 年第六届全国大学生数学竞赛预赛数学类试题参考答案
    [家里蹲大学数学杂志]第322期赣南师范学院数学竞赛培训第11套模拟试卷
    [再寄小读者之数学篇](2014-10-18 利用 Lagrange 中值定理求极限)
    和马有关的成语
    PL/pgSQL学习笔记之一
    PostgreSQL的 initdb 源代码分析之二十五
    PostgreSQL的 initdb 源代码分析之二十四
  • 原文地址:https://www.cnblogs.com/jhxxb/p/13297458.html
Copyright © 2011-2022 走看看