当前位置: 首页 > news >正文

MySQL迁移至GreatSQL后,timestamp字段插入报错解析

MySQL迁移至GreatSQL后,timestamp字段插入报错解析

背景描述

某业务系统进行国产化适配,将MySQL的数据迁移到 GreatSQL 后,执行 INSERT INTO ,update_time传参为空时报错,报错信息为:ERROR 1048 (23000): Column 'update_time' cannot be null ,而原来旧的MySQL环境中没有这个问题。

greatsql> INSERT INTO `t_interface` 
(`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, null, 0);
ERROR 1048 (23000): Column 'update_time' cannot be null 

问题分析

1、在 GreatSQL 进行复现

CREATE TABLE `t_interface` (`interfacer_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',`user_id` int(11) NOT NULL COMMENT '用户id(部门接口人)',`department_id` int(11) NOT NULL COMMENT '部门id',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,`is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除(0未删除 1已删除)',PRIMARY KEY (`interfacer_id`) USING BTREE,KEY `user_id` (`user_id`) USING BTREE,KEY `department_id` (`department_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1162 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;INSERT INTO `t_interface` 
(`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, null, 0);greatsql> INSERT INTO `t_interface` (`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, null, 0);
ERROR 1048 (23000): Column 'update_time' cannot be null

在 GreatSQL 中,INSERT 语句确实报错了。

2、在MySQL 8.0.32中进行复现

mysql> SELECT  version();
+-----------+
| version() |
+-----------+
| 8.0.32    |
+-----------+
1 row in set (0.00 sec)mysql> CREATE TABLE `t_interface` (->   `interfacer_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',->   `user_id` int(11) NOT NULL COMMENT '用户id(部门接口人)',->   `department_id` int(11) NOT NULL COMMENT '部门id',->   `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',->   `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,->   `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除(0未删除 1已删除)',->   PRIMARY KEY (`interfacer_id`) USING BTREE,->   KEY `user_id` (`user_id`) USING BTREE,->   KEY `department_id` (`department_id`) USING BTREE-> ) ENGINE=InnoDB AUTO_INCREMENT=1162 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
INSERT INTO `t_interface` 
Query OK, 0 rows affected, 7 warnings (0.04 sec)mysql> INSERT INTO `t_interface` -> (`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, null, 0);
ERROR 1048 (23000): Column 'update_time' cannot be null

在MySQL 8.0.32中,INSERT 语句也报错了。

3、在MySQL 5.7.30中进行复现

mysql> SELECT  version();
+------------+
| version()  |
+------------+
| 5.7.30-log |
+------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE `t_interface` (->   `interfacer_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',->   `user_id` int(11) NOT NULL COMMENT '用户id(部门接口人)',->   `department_id` int(11) NOT NULL COMMENT '部门id',->   `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',->   `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,->   `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除(0未删除 1已删除)',->   PRIMARY KEY (`interfacer_id`) USING BTREE,->   KEY `user_id` (`user_id`) USING BTREE,->   KEY `department_id` (`department_id`) USING BTREE-> ) ENGINE=InnoDB AUTO_INCREMENT=1162 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO `t_interface` -> (`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, null, 0);
Query OK, 1 row affected (0.00 sec)mysql> SELECT   * from t_interface;
+---------------+---------+---------------+---------------------+--------+------------+
| interfacer_id | user_id | department_id | update_time         | remark | is_deleted |
+---------------+---------+---------------+---------------------+--------+------------+
|          1162 |       9 |            18 | 2025-07-08 10:34:43 | NULL   |          0 |
+---------------+---------+---------------+---------------------+--------+------------+
1 row in set (0.00 sec)

在 MySQL 5.7.30 中,INSERT 语句可以正常执行。

4、问题排查

查看表的字段定义:

update_time:timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'

建表语句里update_time字段类型为timestamp,NOT NULL的限制,默认值为 CURRENT_TIMESTAMP。

字段有 NOT NULL 的限制,不让插入NULL值,理论上是正确的。但 MySQL 5.7 为什么能插入成功呢?

查询系统timestamp相关的系统参数

mysql> SELECT  version();
+------------+
| version()  |
+------------+
| 5.7.30-log |
+------------+
1 row in set (0.00 sec)mysql>SHOW  variables LIKE '%timestamp%';
+---------------------------------+-------------------+
| Variable_name                   | Value             |
+---------------------------------+-------------------+
| explicit_defaults_for_timestamp | OFF               |
| log_timestamps                  | SYSTEM            |
| timestamp                       | 1751270610.230160 |
+---------------------------------+-------------------+
3 rows in set (0.01 sec) mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.32    |
+-----------+
1 row in set (0.00 sec)mysql> SHOW variables like '%timestamp%';
+---------------------------------+-------------------+
| Variable_name                   | Value             |
+---------------------------------+-------------------+
| explicit_defaults_for_timestamp | ON                |
| log_timestamps                  | SYSTEM            |
| original_commit_timestamp       | 36028797018963968 |
| timestamp                       | 1751270143.113409 |
+---------------------------------+-------------------+
4 rows in set (0.01 sec)greatsql>SELECT  version();
+-----------+
| version() |
+-----------+
| 8.0.32-26 |
+-----------+
1 row in set (0.00 sec)greatsql>SHOW variables like '%timestamp%';
+---------------------------------+-------------------+
| Variable_name                   | Value             |
+---------------------------------+-------------------+
| explicit_defaults_for_timestamp | ON                |
| log_timestamps                  | SYSTEM            |
| original_commit_timestamp       | 36028797018963968 |
| timestamp                       | 1751271661.160386 |
+---------------------------------+-------------------+
4 rows in set (0.02 sec)

可以看到在MySQL 5.7中 explicit_defaults_for_timestamp =OFF,

在MySQL 8.0.32和 GreatSQL 中 explicit_defaults_for_timestamp =ON

greatsql>INSERT INTO `t_interface` -> (`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, null, 0);
ERROR 1048 (23000): Column 'update_time' cannot be null
greatsql>set explicit_defaults_for_timestamp=OFF;
Query OK, 0 rows affected, 1 warning (0.00 sec)greatsql>INSERT INTO `t_interface`  (`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, null, 0);
Query OK, 1 row affected (0.00 sec)

在greatsql中,设置explicit_defaults_for_timestamp =OFF后,INSERT 语句可以正常执行。

5、参数说明

explicit_defaults_for_timestamp 这个系统变量决定服务器是否为TIMESTAMP列中的默认值和 空值处理启用某些非标准行为。 默认情况下,MySQL5.7禁用explicit_defaults_for_timestamp, 它启用非标准行为。MySQL8.启用explicit_defaults_for_timestamp,禁用非标准行为。

如果explicit_defaults_for_timestamp被禁用,服务器将启用非标准行为并按如下方式处理TIMESTAMP列:

1、未显式声明NULL属性的TIMESTAMP列将自动声明not NULL属性。允许将这样的列赋值为NULL,并将列设置为当前时间戳。

2、表中的第一个TIMESTAMP列,如果没有显式地使用NULL属性或显式地使用DEFAULT或ON UPDATE属性声明,则会自动使用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性声明。

3、第一个之后的TIMESTAMP列,如果没有显式地使用NULL属性或显式的DEFAULT属性声明,将自动声明为DEFAULT '0000-00-00 00:00:00'(“零”时间戳)。对于没有为这样的列指定显式值的插入行,将为该列分配‘0000-00-00 00:00:00’,并且不会出现警告。

4、根据是否启用了strict SQL模式或NO_ZERO_DATE SQL模式,默认值'0000-00-00 00:00:00'可能无效。请注意,TRADITIONAL SQL模式包括严格模式和NO_ZERO_DATE。

非标准行为在MySQL的未来版本中会被删除。

如果启用了explicit_defaults_for_timestamp,服务器将禁用非标准行为并按如下方式处理TIMESTAMP列:

1、不会将TIMESTAMP NULL列设置为当前时间戳。要分配当前时间戳,请将列设置为CURRENT_TIMESTAMP或NOW()之类的同义词。

2、未显式声明not NULL属性的TIMESTAMP列将自动声明NULL属性并允许NULL值。将这样的列赋值为NULL将其设置为NULL,而不是当前的时间戳。

3、用NOT NULL属性声明的TIMESTAMP列不允许NULL值。对于为这样的列指定NULL的插入,如果启用了严格的SQL模式,则结果是单行插入错误,如果禁用了严格的SQL模式,则会插入'0000-00-00 00:00:00'。在任何情况下,将列赋值为NULL都不会将其设置为当前时间戳。

4、使用NOT NULL属性显式声明且没有显式DEFAULT属性的TIMESTAMP列被视为没有默认值。对于没有为这样的列指定显式值的插入行,结果取决于SQL模式。如果启用了严格SQL模式,则会出现错误。如果没有启用严格的SQL模式,则使用隐式默认值'0000-00-00 00:00:00'声明列,并出现警告。这类似于MySQL处理其他时间类型(如DATETIME)的方式。

5、没有时间戳列被自动声明为默认的CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性。这些属性必须显式指定。

6、表中的第一个TIMESTAMP列与第一个后面的TIMESTAMP列的处理方式没有区别。

greatsql>SET explicit_defaults_for_timestamp=OFF;
Query OK, 0 rows affected, 1 warning (0.00 sec)
greatsql>CREATE TABLE t1( time1 timestamp, time2 timestamp null, time3 timestamp default '2025-01-01 00:00:00', name varchar(100) );
Query OK, 0 rows affected (0.03 sec)
greatsql>INSERT INTO t1  (`time1`, `time2`, `time3`, name) VALUES (null, null, null, 't1');
Query OK, 1 row affected (0.02 sec)
greatsql>SELECT  * FROM t1;
+---------------------+-------+---------------------+------+
| time1               | time2 | time3               | name |
+---------------------+-------+---------------------+------+
| 2025-07-08 13:53:58 | NULL  | 2025-07-08 13:53:58 | t1   |
+---------------------+-------+---------------------+------+
1 row in set (0.00 sec)
greatsql>SHOW CREATE TABLE t1\G
*************************** 1. row ***************************Table: t1
Create Table: CREATE TABLE `t1` (`time1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`time2` timestamp NULL DEFAULT NULL,`time3` timestamp NOT NULL DEFAULT '2025-01-01 00:00:00',`name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
1 row in set (0.00 sec)
greatsql>SET explicit_defaults_for_timestamp=ON;
Query OK, 0 rows affected (0.00 sec)greatsql>CREATE TABLE t2( time1 timestamp, time2 timestamp null, time3 timestamp default '2025-01-01 00:00:00', name varchar(100) );
Query OK, 0 rows affected (0.02 sec)greatsql>INSERT INTO t2  (`time1`, `time2`, `time3`, name) VALUES (null, null, null, 't2');
Query OK, 1 row affected (0.01 sec)greatsql>SELECT  * FROM t2;
+-------+-------+-------+------+
| time1 | time2 | time3 | name |
+-------+-------+-------+------+
| NULL  | NULL  | NULL  | t2   |
+-------+-------+-------+------+
1 row in set (0.00 sec)greatsql>SHOW CREATE TABLE t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`time1` timestamp NULL DEFAULT NULL,`time2` timestamp NULL DEFAULT NULL,`time3` timestamp NULL DEFAULT '2025-01-01 00:00:00',`name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
1 row in set (0.00 sec)

可以看到,在 explicit_defaults_for_timestamp 等于OFF的时候,不仅影响写入,还会影响表结构。 time1 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 创建表时该字段自动增加了NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 虽然字段类型是timestamp not nul ,但可以插入 null,数据写入后变为了 CURRENT TIMESTAMP.

解决方法

问题原因

1、explicit_defaults_for_timestamp参数在不同的数据库版本中,默认值不一样。该参数可能导致在低版本的 MySQL 中能执行的语句,在高版本的 MySQL 中不能执行。

潜在影响

MySQL 5.7升级到MySQL 8.0后,某些SQL语句执行可能会报错。

解决方法

1、设置explicit_defaults_for_timestamp=OFF,使该值和MySQL 5.7一致

该参数为全局变量,修改后会影响所有timestamp字段的处理逻辑(如自动添加NOT NULL和默认值),可能引发其他表的兼容性问题,建议仅在全面评估后临时使用,建议优先调整表结构或 SQL 语句。

2、修改表结构

调整字段定义为timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,从根源避免NULL插入冲突;

3、修改SQL语句:将字段插入的null值改为CURRENT_TIMESTAMP。

INSERT INTO `t_interface` (`user_id`, `department_id`, `update_time`, `is_deleted`) VALUES (9, 18, CURRENT_TIMESTAMP, 0);

MySQL 5.7升级到MySQL 8.0.x/GreatSQL 8.0.x的一些关键注意事项

从5.7版本升级到8.0,有以下相关注意事项,请认真核对是否产生冲突或不兼容:

  1. 最好是先升级到5.7.x的最新版本,再升级到8.0.x的最新版本,不要从5.7的小版本直接升级到8.0,尤其是非GA的版本。
  2. 在8.0中,除了 general_logslow_log 之外,其他所有元数据的字典数据都存储在InnoDB引擎表中,不再采用MyISAM引擎表存储。
  3. 在8.0中,默认采用 caching_sha2_password 密码插件,这可能导致部分版本较早的连接驱动、连接客户端无法连接8.0的服务端,也需要同步升级。
  4. 在8.0中,默认采用 utf8mb4 字符集,而5.7版本默认字符集是 utf8(也是 utf8mb3),在做数据迁移时要注意前后对照校验。
  5. 在8.0中,启动时务必先设定好 lower_case_table_names 选项值,且实例启动后不可再更改,在个别不区分大小写的旧系统中迁移时要特别谨慎。
  6. 在8.0中,参数explicit_defaults_for_timestamp默认值为 ON,这可能会影响 timestamp 类型字段的默认行为。
  7. 在8.0中,默认启用event_scheduler,建议在主从复制或MGR中,在所有从节点中都关闭它。
  8. 在8.0中,分组查询GROUP BY的结果不再默认进行排序,需要显式加上ORDER BY才行。
  9. 新增保留字、关键字,详情请见:2.6 保留字、关键字。
  10. 除InnoDB、NDB外,其他引擎不再支持表分区。
  11. SQL Mode不再支持 NO_AUTO_CREATE_USER,也就是不能直接利用 GRANT 创建新用户并授权,需要先 CREATE USER 创建用户,再授权。
  12. 部分参数选项不再支持,例如:innodb_locks_unsafe_for_binlog, old_passwords, query cache相关参数等。
  13. 部分功能、函数不再支持,例如:query cache, PASSWORD(), ENCODE(), DECODE(), ENCRYPT()等。

参考文档

https://greatsql.cn/docs/8.0.32-26/7-migrate-and-upgrade/1-upgrade-to-greatsql8.html

https://dev.mysql.com/doc/refman/5.7/en/server-system-ariables.html#sysvar_explicit_defaults_for_timestamp

https://dev.mysql.com/doc/refman/8.0/en/server-system-ariables.html#sysvar_explicit_defaults_for_timestamp


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

image-20221030163217640

相关文章:

MySQL迁移至GreatSQL后,timestamp字段插入报错解析

MySQL迁移至GreatSQL后,timestamp字段插入报错解析 背景描述 某业务系统进行国产化适配,将MySQL的数据迁移到 GreatSQL 后,执行 INSERT INTO ,update_time传参为空时报错,报错信息为:ERROR 1048 (23000): Column update_time cannot be null ,而原来旧的MySQL环境中没有这…...

2025年文件摆渡系统哪个品牌好推荐

内容概要 在寻找文件摆渡系统的过程中,企业往往关心哪个品牌能够更好地满足其安全、高效的数据交换需求。2025年,市场上涌现出众多品牌,但“文件摆渡系统哪个品牌好”这一问题,不少企业给出了共同的答案——Ftrans Ferry跨网文件安全交换系统。该系统凭借其全面的安全防护、…...

VU9P板卡设计方案:565-基于VU9P的32@ SFP28+4@ QSFP28路光纤交换板卡

、板卡概述 板卡基于Xilinx FPGA VU9P 设计的一款32路SFP28+4路QSFP28的光纤交换板卡,用于以太网的交换功能的验证。 二、板卡原理框图三、板卡主要性能 ● 主芯片:选用 XCVU9P-2FLGB2104I(702, 76)47.5*47.5 ● 32路SFP28,支持1G、10G以太网协议; 1G,10G 自动适配。 ●…...

Python中使用列表、map和filter函数配合lambda表达式来操作集合

在 Python 中,map()、filter() 和 lambda 表达式是处理集合(如列表)的常用工具,可以快速实现 转换 和 过滤 操作。以下是具体示例:1. map() 函数:对列表元素进行转换 作用: 对列表的每个元素应用一个函数,返回转换后的元素组成的迭代器。 语法: map(function, iterabl…...

大模型decoder中权重矩阵的理解 - 实践

大模型decoder中权重矩阵的理解 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importan…...

文件安全外发平台用哪个,最佳选择是什么?

内容概要 在探讨文件安全外发平台用哪个这一话题时,我们首先要对文件安全外发平台有一个全面的了解。这类平台主要用于确保企业文件在外部传输过程中的安全性,防止数据泄露。市面上存在多种文件安全外发平台,它们各有千秋。而要说到安全管控强大且稳定传输大文件的平台,“F…...

【初赛】数 - Slayer

0x3f3f3f3f = 1061109567 0x7f7f7f7f = 2139062143 0x7fffffff = 2147483647 0xffffffff = 4294967295 0x1fffffff = 536870911 0x1f1f1f1f = 522133279...

http连接(webFlux vs tomcat)

HTTP连接的最大数量不是一个固定的值,它取决于一个由硬件资源、操作系统配置、网络栈、以及应用程序本身共同构成的复杂系统。 简单来说:在一台配置良好的现代服务器上,使用异步非阻塞模型(如WebFlux),支持超过100万甚至更多的并发HTTP连接在理论上是可行的。 而对于传统…...

英语_阅读_Generative AI_待读

Artificial Intelligence (AI) has become part of our everyday life.人工智能(AI)已经成为我们日常生活的一部分。 It makes our smart devices smarter.它让我们的智能设备变得更聪明。 You might have already used some AI programs at school.你可能已经在学校使用过一…...

P8500 [NOI2022] 冒泡排序 题解

Description 最近,小 Z 对冒泡排序产生了浓厚的兴趣。 下面是冒泡排序的伪代码: 输入: 一个长度为 n 的序列 a[1...n] 输出: a 从小到大排序后的结果 for i = 1 to n do:for j = 1 to n - 1 doif (a[j] > a[j + 1])交换 a[j] 与 a[j + 1] 的值冒泡排序的交换次数被定义为在…...

【初赛】链表 - Slayer

链表性质知识点总结 链表是一种线性数据结构,其核心特点是数据元素(称为 “节点”)通过指针或引用连接,而非像数组那样存储在连续的内存空间中。这种结构决定了它与数组截然不同的性质,适用于频繁插入 / 删除、内存动态分配的场景。 一、链表的核心定义与结构基本构成链表…...

纷享销客CRM系统自定义APL代码破解企业深度定制难题

在许多中大型企业,尤其是央企、金融、高科技等行业,对 CRM 系统提出了更为复杂的业务流程定制需求。尽管零代码、低代码配置工具有一定的灵活性,但在面对高度复杂、深度融合业务逻辑的安全机制或特殊流程时,仍显乏力。 为此,纷享销客提供了服务端代码级定制能力,通过自定…...

第2章 zynq开发板FSBL的生成和NAND烧录

前言 由于本人较懒,记录主要是过程,由于zynq的比stm32做的人少很多,资料也少很多,我会简要介绍原理,操作流程主要由图片加少量文字组成,每一章都是在之前的章节基础上做的一、新建FSBL工程 打开vivado,打开SDK打开后会自动根据之前生成的HDF自动生成硬件平台新建一个FSB…...

工具大全

<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><title>工具大全</title><style>/*全…...

RocketMQ vs kafka

目录背景和价值1. 更激进的“零拷贝”技术2. 更简洁的存储模型3. 更“粗糙”但高效的批处理4. 权衡取舍的可靠性保证对比总结参考资料 背景和价值 你这个问题非常好,直击了两者设计哲学的核心差异。 简单来说,Kafka 更快,并非因为它的代码效率绝对更高,而是因为它的设计目标…...

JL-32 土壤速测仪 手持便携 大容量 多参数可同时监测

JL-32 土壤速测仪 手持便携 大容量 多参数可同时监测产品概述 土壤速测仪是一款携带方便,操作简单,集采集与存储于一体的可移动式观测仪器。由手持式速测主机、土壤类传感器、USB数据线、电源适配器、便携式手提箱等部分组成。速测仪主机可通过集线器接入不同类型的传感器,互…...

直播录制神器!一款多平台直播流自动录制客户端!

StreamCap —— 一个基于 FFmpeg 和 StreamGet 的多平台直播流录制客户端,覆盖 40+ 国内外主流直播平台,支持批量录制、循环监控、定时监控和自动转码等功能。大家好,我是 Java陈序员。 现如今,观看直播已成为日常生活中的一种娱乐消遣方式,但常常由于一些不可抗的原因错过…...

101.计组--二章

101.计组--二章数据的表示和运算 "自六月份另一个学校毕业 已经有拖三个多月的计组学习 当时其实已经已有一些学习 仅仅差了一节内容结束 也确实因为这个复杂的运算各类东西 言归正传 新的学校 新的学习 开始总结"先看一下总的还是分为三大块 三步走 一.数制 编码 先…...

LobeChat搭建

步骤 docker search lobe-chat docker pull lobehub/lobe-chat docker run -d -p 3210:3210 -e ACCESS_CODE=lobe66 --name lobe-chat lobehub/lobe-chat docker ps访问 http://localhost:3210 相关的key进入网页再配置,不必加入到docker run中。本文来自博客园,作者:潇汀…...

长园智能装备遇上利驰SuperHarness-3D,实现充电桩线束设计效率与精度双提升!

利驰数字线束软件,赋能长园智能装备充电桩线束智造。设计案例:​感谢南瑞、盛弘、长园等众多充电桩龙头企业,选择利驰数字线束[抱拳][抱拳][抱拳]...

学习笔记:操作分块 / 根号重构

感谢校内模拟赛给我强行灌输了这个东西。。。 概述 操作分块 / 根号重构,又名时间轴分块,可以解决需要多次修改和查询的问题,常常难以直接维护。 借鉴序列分块的思想,我们设定一个阈值 \(B\),将连续 \(B\) 次操作视为一块。考虑一次查询操作,将对它产生影响的修改分为两类…...

url测试脚本3

#!/bin/sh . /etc/init.d/functions# 待检测的 URL 列表 array=("http://mail.163.com""http://mail.sina.com/" )# 等待效果,输出进度 wait_for_start() {echo -n "Start Curl_check"for n in 1 2 3; doecho -n " ."sleep 1doneecho…...

深入解析:linux基本知识

深入解析:linux基本知识pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size:…...

解决方案架构师是做什么

解决方案架构师 面试题 客户是怎么管理的 渠道变革变换的是哪些内容。变的是什么? 分层分级是怎么设计,价格体系是怎么制定的 marking 是怎么做的? CAP模型,是怎么管理的, 营销活动和销售是如何结合的,IT解决方案是什么 职责 懂业务,梳理解决方案。 技术架构 1 号项目。…...

鸿蒙应用开发从入门到实战(九):ArkTS渲染控制

ArkTS拓展了TypeScript,可以结合ArkUI进行渲染控制,是的界面设计具有可编程性。本文简要描述鸿蒙应用开发中的条件渲染和循环渲染。大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战…...

C# 2025年6-9月TIOBE排名增长及未来展望

根据 TIOBE 编程语言排行榜 2025 年 6 月至 9 月的公开数据,C# 的排名和市场份额变化如下(综合多个月份数据整理):一、 C# 在 2025 年 TIOBE 排行榜的连续增长趋势2025 年 6 月排名:第 5 位市场份额:4.69%2025 年 7 月排名:第 5 位市场份额:4.87%2025 年 8 月排名:第 …...

一个基于 .NET 开源、简易、轻量级的进销存管理系统

前言 最近有小伙伴在后台留言问:.NET 有值得推荐学习的进销存管理系统吗?今天大姚给大家推荐一个基于 .NET 开源、简易、轻量级的进销存管理系统:JxcLite。 项目介绍 JxcLite 是一个基于 Known 框架开发(基于 .NET Blazor 轻量级、跨平台、低代码、易扩展的插件开发框架)、…...

采用tree命令导出文件夹/文件的目录树(linux)

采用tree命令导出文件夹/文件的目录树(linux)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !…...

The 2024 ICPC Asia East Continent Online Contest (I) 4/12 A/F/G/M

M. Find the Easiest Problem 签到题,直接模拟即可点击查看代码 #include<bits/stdc++.h> #define int long long using namespace std; using pii=pair<int,int>; using ll = long long; using ull = unsigned long long; const ll inf = 1e18; const int mod = …...

深入解析 JVM 类加载机制:从字节码到运行时对象

一、概述:为什么需要类加载? Java 语言的核心特性之一是"一次编写,到处运行",这背后的关键在于 Java 虚拟机(JVM)和其类加载机制。当我们编写好 Java 代码并将其编译为 .class 字节码文件后,这些静态的字节码需要被加载到 JVM 中才能变为可执行的动态对象。类…...

博弈论学习(第二天)

博弈的基本理性假设: 一般来说,对于研究博弈问题,需要假设参与者具有完美理性,这分三方面,第一个就是参与者的偏好要有一定性,比如对风险的偏好,不能说一个参与者做第一个决策时属于风险接受型,而做第二个决策时就属于风险规避型。第二个就是参与者对所参与决策的问题具…...

PHP 和 Elasticsearch:给你的应用加个强力搜索引擎

PHP 和 Elasticsearch:给你的应用加个强力搜索引擎 现在做 Web 应用,搜索功能基本是标配。不管你做电商、CMS 还是社交应用,用户都希望搜索又快又准。如果你用 PHP 开发,肯定遇到过数据库搜索的瓶颈——数据一多就慢得要死。这时候 Elasticsearch 就能帮大忙了。 这篇文章会…...

2025年- H146-Lc459. 重复的子字符串(字符串)--Java版 - 实践

2025年- H146-Lc459. 重复的子字符串(字符串)--Java版 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New"…...

坚果云 坚果 jianguoyun 怎么收文件?

怎么收文件? 坚果云 坚果 jianguoyun 怎么收文件?注册、登录、免费的空间是 1GB。创建新的收集 https://www.jianguoyun.com/d/home#/ 查看收集结果:https://www.jianguoyun.com/#/...

mssql创建字段依赖

CREATE TABLE temp061_t ( ID INT IDENTITY(1,1) PRIMARY KEY, RoleType INT NOT NULL, isSior INT NULL ); ALTER TABLE temp061_t ADD CONSTRAINT chk_is_sior CHECK ( (RoleType = 1 AND isSior IS NULL) OR (RoleType = 2 AND isSior IN (0,1,2)) ); -- 合法插入 INSERT IN…...

AT_agc053_b [AGC053B] Taking the middle

考虑将先手最大转化为后手最小。 那么可以发现,第 \(i\) 次操作先手一定能让后手从 \([n - i + 1, n + i]\) 中选取最小的一个元素,一定可以。因为考虑先手拿的顺序不重要,一定存在构造方案,使得能让任意一个元素为中位数。...

一款多功能Linux服务器Web管理面板

为什么使用 Docker 部署 EasyNode? 正如您所说,Docker 部署具有显著优势: 环境隔离与一致性:所有依赖(Node.js, PM2等)都封装在容器内,与宿主机环境隔离,避免冲突。在任何支持 Docker 的 Linux 发行版上,体验完全一致。 简化安装:无需在主机上手动安装 Node.js、配置…...

2025.9.16 测试

2025.9.16 测试1. Problem A: 逆序对(reverse) 根据冒泡,只要逆序对个数够就有方案 经过思考,我们找到第一个操作个数大于的前缀,然后操作前一个前缀,这样前边变有序后,与当前数成逆序对一定是个后缀,然后根据需要选任意个即可 所以我们对任意方案构造出了 \(= 2\) 的解 …...

题解:P12558 [UOI 2024] Heroes and Monsters

题面: (这个没交洛谷,给学弟写的。) \(O(n^3)\) 考虑直接求出所有 \(ans_i\),前缀和回答询问。 \(a,b\) 先排序。由于我们只关心英雄的集合,所以怪兽我们贪心选择,如果我们选这个英雄那么选最前面的怪兽,否则选后面第一个能打死自己的怪兽。显然,合法方案怪兽的前缀会…...

数据分析与产品、运营、市场之间如何有效对齐 - 详解

数据分析与产品、运营、市场之间如何有效对齐 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monosp…...

(附源码)基于Java的学生托管系统的设计与实现 - 实践

(附源码)基于Java的学生托管系统的设计与实现 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mono…...

SVG动画优化全攻略:从设计到性能提升

本文详细介绍了如何通过清洁设计、路径简化、代码分层和元素复用等技术优化SVG动画,涵盖工具选择、结构设计到CSS动画实现的全流程,帮助开发者创建高性能的SVG动画效果。粉碎动画第四部分:优化SVG SVG动画让我回想起童年观看的汉纳-巴伯拉卡通片。像《Wacky Races》、《The …...

【GitHub每日速递 250919】MCP 生态新工具!Registry 服务器注册服务预览版,AI 开发者部署认证全流程揭秘

原文:https://mp.weixin.qq.com/s/vpm5exQj1imATtK6edQjZA gRPC-Go:高性能开源RPC框架,使用攻略及常见问题全解析 [grpc-go] 是一个基于 HTTP/2 的高性能远程过程调用(RPC)框架的 Go 语言实现。简单讲,它让不同服务能高效地通过网络互相调用函数。适用人群:Go 语言开发者…...

多元积性函数

定义:若函数 \(f(n,m)\) 满足 \(ab \perp xy \Rightarrow f(ax,by)=f(a,b)f(x,y)\),则称 \(f\) 为二元积性函数。 积性分解:将 \(x=\prod p_i^{\alpha _i},y=\prod p_i^{\beta _i}\),则有 \(f(x,y)=\prod f(p_i^{\alpha_i},p_i^{\beta_i})\)。 二元迪利克雷卷积:\((f*g)(n…...

MX 练石 2026 NOIP #7

好难好难好难好难,为数不多的罚坐了。MX 练石 2025 NOIP #6 链接:link 题解:link 时间:4h20min (2025.09.18 13:50~18:10) 题目数:4 难度:A B C D估分:50 + 10 + 10 + 10 = 80 得分:场祭 读题。 开 A,发现可以转化为 \(a_i - i \le a_j - j \land b_i - i \ge b_j - j…...

用Qt打造永远运行的程序/守护进程/程序启动器/实时监测程序运行/后台运行

一、前言说明 最近有个定制需求,希望程序能够一直运行,比如在windows上运行的程序,很可能无法保证不出故障崩溃,有时候可能是程序内部处理异常导致的崩溃,比如有些数据解析没有考虑到一些极端的情况,还有就是用户主动关闭了程序,可能是误关闭,而有些程序,又必须7*24小…...

传话游戏 题解

详细揭秘传话游戏 题解 题目描述 初始时你有一个长度为 \(m\) 的字符串 $ S_1 $ ,然后你可以进行 $ n-1 $ 次操作,每次操作修改当前字符串,形如删掉其中某些元素(可以全删,也可以都不删)。第 \(i\) 次操作得到的字符串记为 $ S_{i+1} $ ,这样得到了由 \(n\) 的字符串形成…...

智驾芯片三强对决:征程6P vs EyeQ Ultra vs Thor

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087智能驾驶芯片是自动驾驶技术的「中枢神经」,其性能直接关乎车辆感知决策的精准度与响应速度。当前,全球智驾芯片市场呈现多元…...

0132_访问者模式(Visitor)

访问者模式(Visitor) 意图 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 UML 图优点开闭原则:容易添加新的访问者操作,无需修改元素类 单一职责原则:将相关行为集中到一个访问者对象中 灵活性:可以在运行…...

国内AI云市场:挤不进前三,生存将成问题!

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087中国AI云市场已形成“一大四强”的格局,阿里云以35.8%的份额独占鳌头,而第五名之后的厂商合计市场份额不足25%,在残酷的竞争…...