数据库系列之MySQL中的SQL Mode介绍

MySQL的sql_mode模式说明 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题.sql model 常用来解决下面几类问题。 阅读详情

SQL mode定义了不同的SQL语法操作,本文简要介绍了MySQL中的SQL mode类型及使用,结合具体案例使用加深理解,适用于兼容MySQL语法的分布式数据库。


1、Server SQL Mode介绍

MySQL Server可以运行在不同的SQL Modes下,每一类SQL Modes定义MySQL应该支持什么样的SQL语法。DBA可以设置系统级别的SQL mode,每个应用也可以根据需要设置session级别的SQL mode。在MySQL 8.0版本中默认设置以下SQL mode:

mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

在MySQL 8.0版本中支持以下SQL mode:

在这里插入图片描述

其中ANSI、STRICT_TRANS_TABLES和TRADITIONAL为最常用的SQL Mode。

  • ANSI更接近于标准SQL,等同于REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE和ONLY_FULL_GROUP_BY
  • STRICT_TRANS_TABLES:如果无法按给定的方式将值插入到事务表中,请中止该语句。对于非事务表,如果值出现在单行语句或多行语句的第一行中,则中止该语句
  • TRADITIONAL:使MySQL的行为像一个“传统”的SQL数据库系统,在向列中插入错误值时,此模式“给出错误而不是警告”。等同于STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO和NO_ENGINE_SUBSTITUTION
1.1 ANSI_QUOTES

双引号””不能作为引用字符串,而是会解释为标识符。

mysql> set @@session.sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@session.sql_mode;
+--------------------+
| @@session.sql_mode |
+--------------------+
|                    |
+--------------------+
1 row in set (0.00 sec)
mysql> select "test" from tango.test01;
+------+
| test |
+------+
| test |
| test |
| test |
+------+
3 rows in set (0.02 sec)

设置sql_mode为ansi_quotes,可以看到test标识为column列名进行查询

mysql> set @@session.sql_mode='ansi_quotes';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@session.sql_mode;
+--------------------+
| @@session.sql_mode |
+--------------------+
| ANSI_QUOTES        |
+--------------------+
1 row in set (0.00 sec)

mysql> select "test" from tango.test01;
ERROR 1054 (42S22): Unknown column 'test' in 'field list'
1.2 ERROR_FOR_DIVISION_BY_ZERO

ERROR_FOR_DIVISION_BY_ZERO模式影响insert或update时出现除以0或者以0取模(mod(N,0)),根据是否设置为严格模式有以下几种情况:

  • 当不设置ERROR_FOR_DIVISION_BY_ZERO,除以0或以0取模的结果为null,不产生告警;
  • 当设置ERROR_FOR_DIVISION_BY_ZERO,除以0或以0取模的结果为null,并产生告警;
  • 当设置ERROR_FOR_DIVISION_BY_ZERO和严格模式,除以0或以0取模会产生报错,除非insert和update配合ignore适用;
  • 对于select查询,除以0或以0取模在任何情况下都会返回null,如果设置ERROR_FOR_DIVISION_BY_ZERO,则会产生warnings;

ERROR_FOR_DIVISION_BY_ZERO并不包含在严格模式里,但这个选项即将被废弃,在未来的版本会合并到严格模式里。

1.3 HIGH_NOT_PRECEDENCE

NOT操作的顺序,比如NOT a BETWEEN b AND c被解释为NOT (a BETWEEN b AND c)。

mysql> set @@session.sql_mode='';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
+------------------------+
| NOT 1 BETWEEN -5 AND 5 |
+------------------------+
|                      0 |
+------------------------+

mysql> SET sql_mode = 'HIGH_NOT_PRECEDENCE';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
+------------------------+
| NOT 1 BETWEEN -5 AND 5 |
+------------------------+
|                      1 |
+------------------------+
1 row in set (0.00 sec)
1.4 IGNORE_SPACE

允许函数名和()之间有空格,这会导致内置的函数为关键字。只是对于内置函数而言,对于用户定义的函数,总是允许和()之间有空格。

mysql>  set @@session.sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE count (i INT);
Query OK, 0 rows affected (0.10 sec)

当设置ignore_space后

mysql> set @@session.sql_mode='ignore_space';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE count (i INT);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'count (i INT)' at line 1

mysql> CREATE TABLE `count` (i INT);
Query OK, 0 rows affected (0.10 sec)

由于count是内置函数,创建表名为count时需要加标识符

1.5 NO_UNSIGNED_SUBTRACTION

当两个整数相减时,其中一个unsigned,会默认生成unsigned的结果。但是如果结果是负数,则会出错。

mysql> set @@session.sql_mode='';

mysql> SELECT CAST(0 AS UNSIGNED) - 1;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)'

如果设置了NO_UNSIGNED_SUBTRACTION,结果如下:

mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT CAST(0 AS UNSIGNED) - 1;
+-------------------------+
| CAST(0 AS UNSIGNED) - 1 |
+-------------------------+
|                      -1 |
+-------------------------+
1 row in set (0.00 sec)

如果两个整数相减的结果用来更新一个unsigned列,默认情况下是该列数据类型的最大值,如果开启了NO_UNSIGNED_SUBTRACTION,则设置为0。但是在strict SQL mode下,列值不会变化,并且会报错。

mysql> SET sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE test (c1 BIGINT UNSIGNED NOT NULL);
Query OK, 0 rows affected (0.09 sec)

mysql> CREATE TABLE t1 SELECT c1 - 1 AS c2 FROM test;
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE t1;
+-------+-----------------+------+-----+---------+-------+
| Field | Type            | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+-------+
| c2    | bigint unsigned | NO   |     | 0       |       |
+-------+-----------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> SET sql_mode='NO_UNSIGNED_SUBTRACTION';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE t2 SELECT c1 - 1 AS c2 FROM test;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE t2;
+-------+--------+------+-----+---------+-------+
| Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| c2    | bigint | NO   |     | 0       |       |
+-------+--------+------+-----+---------+-------+
1 row in set (0.00 sec)
1.6 ONLY_FULL_GROUP_BY

对于group by聚合操作,如果在select中出现的列没有在group by中出现,那么这种SQL是不合法的。

##创建表并插入数据
mysql> DROP TABLE IF EXISTS mytable;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE mytable (
    -> id INT UNSIGNED NOT NULL PRIMARY KEY,
    -> a VARCHAR(10),
    -> b VARCHAR(10),
    -> c INT
    -> );
Query OK, 0 rows affected (0.10 sec)

mysql> INSERT INTO mytable
    -> VALUES (1, 'abc', 'qrs', 1000),
    ->        (2, 'abc', 'tuv', 2000),
    ->        (3, 'def', 'qrs', 4000),
    ->        (4, 'def', 'tuv', 8000),
    ->        (5, 'abc', 'qrs', 16000),
    ->        (6, 'def', 'tuv', 32000);
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0

##设置SQL MODE为ONLY_FULL_GROUP_BY
mysql> SET sql_mode='ONLY_FULL_GROUP_BY';
mysql> select a,b,max(c) from mytable group by a;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'tango.mytable.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql> select a,b,max(c) from mytable group by a,b;
+------+------+--------+
| a    | b    | max(c) |
+------+------+--------+
| abc  | qrs  |  16000 |
| abc  | tuv  |   2000 |
| def  | qrs  |   4000 |
| def  | tuv  |  32000 |
+------+------+--------+
4 rows in set (0.00 sec)
1.7 PAD_CHAR_TO_FULL_LENGTH

默认情况下,列类型为char会裁剪掉,但是如果设置了PAD_CHAR_TO_FULL_LENGTH,CHAR类型的列会使用空Ox20进行填充。

mysql> CREATE TABLE t1 (c1 CHAR(10));
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO t1 (c1) VALUES('xy');
Query OK, 1 row affected (0.00 sec)

mysql> SET sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT c1, CHAR_LENGTH(c1) FROM t1;
+------+-----------------+
| c1   | CHAR_LENGTH(c1) |
+------+-----------------+
| xy   |               2 |
+------+-----------------+
1 row in set (0.00 sec)

设置SQL Mode为PAD_CHAR_TO_FULL_LENGTH后

mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SELECT c1, CHAR_LENGTH(c1) FROM t1;
+------------+-----------------+
| c1         | CHAR_LENGTH(c1) |
+------------+-----------------+
| xy         |              10 |
+------------+-----------------+
1 row in set (0.00 sec)
1.8 TIME_TRUNCATE_FRACTIONAL

当date、time或timestamp中带有飞秒值时根据列的精度是truncate还是rounding,默认是使用rounding,设置该SQL mode时候会使用truncate。

mysql> CREATE TABLE t2 (id INT, tval TIME(1));
Query OK, 0 rows affected (0.02 sec)
mysql> SET sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t2 (id, tval) VALUES(1, 1.55);
Query OK, 1 row affected (0.01 sec)
mysql> SET sql_mode='TIME_TRUNCATE_FRACTIONAL';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t2 (id, tval) VALUES(2, 1.55);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT id, tval FROM t2 ORDER BY id;
+------+------------+
| id   | tval       |
+------+------------+
|    1 | 00:00:01.6 |
|    2 | 00:00:01.5 |
+------+------------+
2 rows in set (0.00 sec)
2、Strict SQL mode

Strict mode控制着MySQL在update/insert时候对于invalid或missing数据的处理。插入或更新的值invalid有多种原因,比如数据类型错误、值越界等;值缺失是因为向NOT NULL列插入数据的时候没有显示的指定DEFAULT语句。Strict mode也会影响到create table语句。而对于strict mode下的select语句,只会生成一个warning,不会报错。

如果没有生效strict mode,MySQL在插入invalid或缺失值的时候会自动调整,并产生warning信息。在Strict mode下,也可以使用INSERT IGNORE或UPDATE IGNORE产生同样的效果。
Strict mode在设置了STRICT_ALL_TABLES或STRICT_TRANS_TABLES生效,这两个模式有以下区别:

  • 对于业务的表,在两种模式下当insert/update语句出现了invalid或missing values会报错,语句会中断并回滚
  • 对于非业务的表,对于insert/update第一行数据的时候跟业务表有同样的行为,语句出错并回滚。但是对于多行记录,并且出错的不在第一行记录的时候,会有所不同
    • 对于STRICT_ALL_TABLES,mysql会报错并忽略余下所有的记录数,这样就会造成有部分成功了。为了避免这个问题,可以使用single-row语句。
    • 对于STRICT_TRANS_TABLES,mysql会把invalid值转换为最接近的valid值并插入;如果值缺失了,会插入默认的值。同时mysql会产生一个warning并继续处理下面的操作
2.1 IGNORE和Strict SQL mode对比

下表对比了当默认值是error还是warning时候IGNORE和Strict SQL mode的不同表现:

在这里插入图片描述

从以上可以看出,当同时设置strict SQL mode和IGNORE下,IGNORE优先级更高

2.1.1 IGNORE的影响

在mysql中有些语句支持IGNORE关键字,它会将某些类型的错误降级并产生warning来替代。对于multi-row语句,错误降级为warning可以继续处理接下去的语句,同时IGNORE也会跳过出错的rows。

如下表t3中的主键包含唯一性约束,当插入相同的数据时会提示重复键值。

mysql> CREATE TABLE t3 (i INT NOT NULL PRIMARY KEY);
mysql> INSERT INTO t3 (i) VALUES(1),(1);
ERROR 1062 (23000): Duplicate entry '1' for key 't3.PRIMARY'

加入IGNORE参数后,重复值依然不会插入,但是会报一个warning,语句并没有出错中断

mysql> INSERT IGNORE INTO t3 (i) VALUES(1),(1);
Query OK, 1 row affected, 1 warning (0.00 sec)
Records: 2  Duplicates: 1  Warnings: 1

mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1062 | Duplicate entry '1' for key 't3.PRIMARY' |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

在MySQL中以下语句支持IGNORE关键字:CREATE TABLE … SELECT、DELETE、INSERT、LOAD DATA和UPDATE。IGNORE关键字会忽略以下错误:

ER_BAD_NULL_ERROR
ER_DUP_ENTRY
ER_DUP_ENTRY_WITH_KEY_NAME
ER_DUP_KEY
ER_NO_PARTITION_FOR_GIVEN_VALUE
ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT
ER_NO_REFERENCED_ROW_2
ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET
ER_ROW_IS_REFERENCED_2
ER_SUBQUERY_NO_1_ROW
ER_VIEW_CHECK_FAILED
2.1.2 Strict SQL Mode的影响

在Strict SQL mode下,会将特定的warning升级为error。比如在non-strict mode下,插入字符串到整数列会将值转为0,并产生warning。

mysql> SET sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t3 (i) VALUES('abc');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+--------------------------------------------------------+
| Level   | Code | Message                                                |
+---------+------+--------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: 'abc' for column 'i' at row 1 |
+---------+------+--------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from t3;
+---+
| i |
+---+
| 0 |
| 1 |
+---+
2 rows in set (0.00 sec)

如果在strict mode下,invalid value会被拒绝并且报错:

mysql> SET sql_mode = 'STRICT_ALL_TABLES';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> INSERT INTO t3 (i) VALUES('abc');
ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'i' at row 1

Strict SQL mode在值invalid或缺失的时候会产生以下错误信息:

ER_BAD_NULL_ERROR
ER_CUT_VALUE_GROUP_CONCAT
ER_DATA_TOO_LONG
ER_DATETIME_FUNCTION_OVERFLOW
ER_DIVISION_BY_ZERO
ER_INVALID_ARGUMENT_FOR_LOGARITHM
ER_NO_DEFAULT_FOR_FIELD
ER_NO_DEFAULT_FOR_VIEW_FIELD
ER_TOO_LONG_KEY
ER_TRUNCATED_WRONG_VALUE
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
ER_WARN_DATA_OUT_OF_RANGE
ER_WARN_NULL_TO_NOTNULL
ER_WARN_TOO_FEW_RECORDS
ER_WRONG_ARGUMENTS
ER_WRONG_VALUE_FOR_TYPE
WARN_DATA_TRUNCATED

以上是SQL Mode的简单介绍,在核心业务系统中,根据最佳实践SQL mode设置为ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION, PIPES_AS_CONCAT, IGNORE_SPACE。


参考资料:

  1. https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html
  2. https://blog.youkuaiyun.com/weixin_39004901/article/details/89378097
  3. https://www.modb.pro/db/24613

转载请注明原文地址:https://blog.youkuaiyun.com/solihawk/article/details/119696848
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!
在这里插入图片描述

深入理解 MySQL 中的 SQL_MODE SQL_MODE 是 MySQL 数据库中的一个系统变量,用于控制 MySQL 如何处理 SQL 语句和数据校验。它可以看作是一组约束和规范,确保数据的准确性、完整性和一致性。例如,可以控制如何处理无效日期、是否允许插入不完整的记录、是否区分大小写等。完成不同严格程度的数据校验,有效地保障数据准确性。保证大多数 SQL 符合标准的 SQL 语法,这样应用在不同数据库之间进行迁移时,则不需要对业务 SQL 进行较大的修改。在不同数据库之间进行数据迁移之前,通过设置 SQL_MODE。 阅读详情

相关推荐

【MySQL精通之路】MySQL8.0-SQL模式

MySQL服务器可以在不同的SQL模式下运行,并且可以根据sql_mode系统变量的值将这些模式应用于不同的客户端。DBA可以设置全局SQL模式以匹配站点服务器的操作要求,并且每个应用程序可以根据自己的要求设置其会话的SQL模式。模式会影响MySQL支持的SQL语法及其执行的数据验证检查。这使得在不同的环境中使用MySQL以及将MySQL与其他数据库服务器一起使用更容易。有关MySQL中服务器SQL模式的常见问题的答案请参阅“MySQL 8.0常见问题解答:服务器SQL模式”。

Anakki的博客 1842

Mysql中sql_mode使用详解

一、Sql_mode是什么? Sql_mode是一组mysql的语法校验规则,定义了mysql应该支持的sql语法、数据校验等。 二、如何查看当前sql_mode配置? 方法一:select @@sql_mode; 方法二:select @@SESSION.sql_mode; 方法三:select @@GLOBAL.sql_mode; 三、如何设置sql_mode? 1、通过命令设置 SET sql_mode = ''; SET SESSION sql_mode = ''; SE

firesea的专栏 2万+

【项目实战】MySQL的SQL_MODE数据模式入门介绍

sql_mode可以设置多种模式,每个模式都代表一种SQL行为。以下是常见SQL_MODE设置及其作用,除了以下模式外,还有许多其他的模式等。详细的文档可以在MySQL官方文档中找到。

奶爸的编程之路,也就一周冷个三天 1870

【MySQL】sql_mode 模式

MySQL 的 sql_mode 分两种模式,宽松模式与严格模式。在 MySQL 5.7 版本之前,MySQL 服务的默认模式一直是宽松模式,从版本 5.7 开始,MySQL 服务默认模式为严格模式。

zzd13546036394的博客 5082

数据资产目录(SailCatalog)和数据地图(SailMap)

笔者接下来准备开发大数据平台(XSailboat)中的数据资产目录(SailCatalog)和数据地图(SailMap)相关的功能,本文用以记录笔者关于此部分功能的概念梳理和主体功能设计。

OkGogooXSailboat的博客 2326

银河麒麟V10搭建vsftpd

1、查看是否有安装过2、安装3、服务启动步骤设置开机启动并此次立即启动启动重启停止查看状态4、系统防火墙放行ftp服务如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤。

hhq850741642的博客 6481

科普文:软件架构数据库系列之【MySQL的sql_mode参数】

sql_mode是MySQL的一个系统变量,用于设置服务器对SQL语句的解析和执行规则。它可以影响MySQL的行为,包括语法规范、数据校验、数据类型转换和错误处理等。sql_mode是个很容易忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。本文介绍sql_mode的参数取值规则和取值解释,您可以根据实际业务进行调整。

为无为,事无事,味无味。 1977

Rocky Linux 9 远程桌面配置全攻略:从零搭建XRDP服务(含防火墙设置)

本文提供了在Rocky Linux 9上从零开始配置XRDP远程桌面服务的完整指南。详细介绍了系统准备、XRDP服务安装、防火墙与SELinux安全设置、多用户性能优化以及多平台客户端连接实测。重点解决了使用Windows远程桌面协议(RDP)连接Rocky Linux时常见的配置难点与安全问题,帮助用户获得稳定高效的图形化远程访问体验。

vodka的博客 646

ef 执行mysql存储过程_如何用VS EF连接 Mysql,以及执行SQL语句 和存储过程?

VS2013, MySQL5.7.18 , MySQL5.7.14执行SQL语句:ztp_user z = new ztp_user();object[] obj = new object[] { z };MySqlParameter[] p = new MySqlParameter[]{new MySqlParameter("@username","admin1")};var result = ...

weixin_36186183的博客 332

手把手教你用ADS和CGH40010F模型搭建Doherty功放仿真原型(附工程文件)

本文详细介绍了如何使用ADS软件和CGH40010F GaN器件模型搭建Doherty功放仿真原型,涵盖工程准备、关键电路模块实现、效率优化技巧及常见问题排查。通过实战指南和效率优化技巧,帮助工程师快速掌握Doherty功放设计,提升5G基站和广播发射系统的功率放大器性能。

weixin_26897585的博客 343

SAP Group Reporting入门指南(8)--业务操作

关于资产负债表类的匹配,系统预设了SGR01和SGR02两个方法,主要区别在于数据的来源范围,SGR01取自ACDOCA和ACDOCU,如果是0F类型的就会直接显示日记账分录(期间是000的除外,这类凭证是年结结转的,系统不再跨年追溯),如果是其他类型就显示合并分录。这里是我觉得SAP还需要优化的地方。基于ICMR的抵消任务中通常将抵销差异细分为交易差异、货币换算差异和其他差异,这在基于重分类抵消任务是无法实现的,基于重分类抵消只知道一个差异总额,很难从合并抵消凭证看出差异的来源,也没有审计线索可言。

bflyfish的博客 275

mysql 复合索引 in_mysql 复合索引?

谢邀mysql> create table song(id int,name varchar(10));Query OK, 0 rows affected (0.02 sec)mysql> insert into song (id) values(10);Query OK, 1 row affected (0.02 sec)mysql> select * from song;+-...

weixin_39759589的博客 212

构建 Skill 的完整指南

Skill开发指南摘要 Skill是用于定制Claude AI行为的指令包,包含SKILL.md主文件及可选脚本、参考文档和资源。本文提供了完整的Skill开发指南: 核心概念 三层渐进式披露结构(元数据/主指令/参考文档) 支持独立工作流和MCP集成 跨平台兼容性(Claude.ai/ClaudeCode/API) 开发流程 规划:明确2-3个具体用例 结构要求:kebab-case命名、必备YAML元数据 编写规范:清晰触发条件、分步指令、错误处理 典型应用模式 • 文档生成(类别1) • 工作流自动化

wjianwei666的专栏 290

解决docker mysql 8.0 遇到sql_mode=only_full_group_by的问题

背景:为了避免本地环境污染,希望通过docker安装mysql,练习sql使用。安好之后发现建表的时候遇到sql_mode=only_full_group_by的问题。

weixin_43065003的博客 4116

Arduino ESP32 Web服务器从microSD卡读取

Arduino ESP32 Web服务器从microSD卡读取 将网页内容放到SD卡中,当有客户端数据请求时,从SD卡读取信息进行发送,比起SPIFFS文件系统,更节约板上的硬件资源。 SD卡接线说明 ESP32----- SD D5(GPIO 5)-----CS D18(GPIO 18)-----SCK D19(GPIO 19)-----MISO D23()GPIO 23-----MOSI 文件放置 需要把文件放置到SD卡的根目录下。注意SD卡的格式FAT32格式。 实例代码 /*

perseverance51博客 1433

基于卷积神经网络的遥感图像地物分类

AI:89-基于卷积神经网络的遥感图像地物分类 基于卷积神经网络的遥感图像地物分类是一个令人兴奋的领域,它在环境监测、城市规划、农业、国防等领域具有广泛的应用。深度学习技术为我们提供了更准确、高效的工具,有望在未来进一步提高分类性能。在本文中,我们探讨了卷积神经网络的工作原理、数据准备、模型构建、训练和评估过程,并提供了多个代码示例。此外,我们讨论了地物分类的应用和挑战,以及未来的发展趋势。

一键难忘的博客 2717

MySQL 8 中的 sql_mode

sql_mode

学习,分享一直在路上 2699

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL中sql_mode参数

1.sql_mode 是一组mysql支持的基本语法及校验规则 查询当前系统sql_mode的设置: mysql> select @@sql_mode; ±--------------------------------------------------------------------------------------------+ | @@sql_mode ...

weixin_42373127的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL 中的 sql_mode 选项以及配置

MySQL的sql_mode配置

睿思达DBA 2905

mysql中sql_mode的修改

很多时候修改sql_mode是因为插入或者修改空日期失败 只要sql_mode中的两个属性删除就可以了 NO_ZERO_DATE(设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告) NO_ZERO_IN_DATE(在严格模式下,不允许日期和月份为零) 1. 查询sql_mode select @@GLOBAL.sql_mode 或 select @@SESSION.sql_mode 2. 设置sql_mode 把刚刚查询出来的sql_mode找到 NO_ZERO_DATE 和

Turbo 1万+

MySQL中的SQL_MODE模式

MySQL中的SQL_MODE模式

scorpio的博客 1410

MySQL的sql_mode查询与设置

1,执行SQL查看 select @@session.sql_mode; 全局级别: 查看 select @@global.sql_mode; 2,修改 set @@session.sql_mode='xx_mode' set session sql_mode='xx_mode' 全局级别:修改 set global sql_mode='xx_mode'; set @@global.sql_mode='xx_mode'; session均可省略,默认session,仅对当前会话有效 全局修改的话,

qq_32109909的博客 8万+

MySQL的sql_mode模式

MySQL系列 第一章:sql_mode模式 文章目录MySQL系列背景一、sql_mode模式二、sql_mode模式配置方式1:方式2:方式3: 背景 最近工作中,以前的功能突然不能正常工作,通过一通排查,发现是sql语句执行报错,具体错误信息如下,里面相关业务字段已经去掉。 The error occurred while setting parameters ### SQL: select id,xxx from table1 group by code order by create_time

守正出奇 7211

MySQL基础篇:sql_mode配置

文章目录零、简介一、sql_mode常用来解决的几类问题二、sql_mode包含的模式三、sql_mode各个选项作用示例3.1、sql_mode为空(对于不符合定义的值,会截断到符合定义类型)3.2、sql_mode为ANSI3.3、sql_mode为TRADITIONAL3.4、sql_mode为STRICT_TRANS_TABLES四、sql_mode选项说明五、sql_mode设置 零、...

HTZW的博客 7479

MySQL的sql_mode解析与设置

解析 这个sql_mode,简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等。。 一、如何查看当前数据库使用的sql_mode: mysql> select @@sql_mode; 如下是我的数据库当前的模式: 二、sql_mode值的含义: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GR...

xinyuan的专栏 1万+
上一篇: 数据库系列之InnoDB中的主键选择
下一篇: 数据库系列之TiDB存储引擎TiKV实现机制
solihawk
博客等级 码龄17年 7995粉丝 184原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值