zoukankan      html  css  js  c++  java
  • Mysql Mode

     

    MySQL可以运行在不同的SQLMode(SQL模式)下。SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。

     

     

    查询默认的sql mode

    mysql> select @@sql_mode;
    +-------------------------------------------------------------------------------------------------------------------------------------------+
    | @@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.00 sec)

    ANSI 模式

     

    create table nj(cc datetime);
    set session sql_mode='ANSI';
    insert into nj  values ('2019-13-221');

    你发现这时候是可以插入的,但是数据的值就是0000-00-00 00:00:00

     

    set session sql_mode='TRADITIONAL';
    insert into t  values ('2019-13-221');
    [22001][1292] Data truncation: Incorrect datetime value: '2019-13-221' for column 'cc' at row 1

    换成 TRADITIONAL 模式之后发现插入报错了,因为 TRADITIONAL 是严格模式

     

     

     

    插入的字符串 被转换了

     

    mysql> set session sql_mode='ANSI';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    mysql> create table t2(cc varchar(20));
    Query OK, 0 rows affected (0.24 sec)
    mysql> insert into t2  values ('
    anjing');
    Query OK, 1 row affected (0.03 sec)
    mysql> select * from t2;
    +---------+
    | cc      |
    +---------+
    | 
    anjing |
    +---------+
    1 row in set (0.00 sec)
    

    发现插入的字符串 被干掉了, 是ANSI 模式下给你转义了

    如果想原封不动的插入

    set session sql_mode='NO_BACKSLASH_ESCAPES';
    insert into t2  values ('
    anjing');
    mysql> select * from t2;
    +----------+
    | cc       |
    +----------+
    |
    anjing  |
    | 
    anjing |
    +----------+
    2 rows in set (0.01 sec)

    启用NO_BACKSLASH_ESCAPES模式,使反斜线成为普通字符。在导入数据时,如果数据中含有反斜线字符,那么启用NO_BACKSLASH_ESCAPES模式保证数据的正确性,是个不错的选择。

     

     

    在 ANSI模式下 || 还可以当拼接字符串使用

    set session sql_mode ='ANSI';
    select 'beijing' || 'nanjing';
    beijingnanjing

     

     

    常用Mode

     

    ANSI

    等同于 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE  和ANSI 组合模式,这种模式使语法和行为更符合标准的SQL

    STRICT_TRANS_TABLES

    STRICT_TRANS_TABLES 适用于事物表和非事物表,它是严格模式,不允许非法日期,也不允许超过字段长度的值插入字段中,对于插入不正确的值给出错误而不是警告

    TRADITIONAL

    TRADITIONAL模式等同于  STRCT_TRANS_TABLES,STRICT_ALL,NO__ZERO_IN_DATE,ERROR_FOR_DIVSION_BY_ZERO,TRADITIONAL 和NO_AUTO_CREATE_USER 组合模式,所以它也是严格模式,对于插入不正确的值给出错误而不是警告,可以应用在事物表和非事物表,用在事物时,出现错误就会立刻回滚

     

     

     

  • 相关阅读:
    jar与war包区别,转自https://www.jianshu.com/p/3b5c45e8e5bd
    关于spring
    关于 SQL 的操作
    IDEA 创建一个完整maven项目
    用 eclipse 生成 maven 项目快速生成 web.xml 文件
    Spring拦截器中@Value无效的解决办法
    错误:java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie value
    错误:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resources (default-resources) on project sea rch-zk-increment-monitor: Mark invalid -> [Help 1]
    错误:Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out
    关于 Spring 的示例
  • 原文地址:https://www.cnblogs.com/wlphp/p/12906472.html
Copyright © 2011-2022 走看看