金仓数据库V009R003C011与MySQL 8.0.12的5大关键语法差异对比(附实测代码)

【金仓数据库征文】CentOS7 上玩转 KingbaseES V9:全链路部署实操指南 本文详细介绍了在Linux系统上安装金仓 KingbaseES(MySQL兼容版)V9数据库的全过程,包括安装前准备、数据库安装、数据库使用与管理以及与其他数据库系统的对比。通过实操命令流程,读者可以清晰地了解金仓 KingbaseES 的安装和使用方法。 阅读详情

金仓数据库V009R003C011与MySQL 8.0.12:迁移实战中必须掌握的五大语法“陷阱”与应对策略

如果你正负责一个将业务从MySQL迁移到金仓数据库的项目,或者正在评估金仓的MySQL兼容性,那么这篇文章就是为你准备的。我最近刚完成一个中型系统的迁移,过程中踩了不少坑,也积累了一些宝贵的经验。很多开发者以为,既然金仓宣称是“MySQL兼容版”,那直接把SQL脚本复制过去执行就万事大吉了。这种想法在初期会让你节省不少时间,但一旦遇到那些微妙的、不兼容的语法点,就可能引发数据不一致、程序报错甚至业务中断的严重问题。今天,我们不谈宏观的架构差异,就聚焦在最具体、最常使用的SQL语法层面,通过实测代码,把那些最容易让你“翻车”的五个关键点掰开揉碎了讲清楚。

1. 数据插入的“静默”艺术:INSERT IGNORE的行为差异

在MySQL中,INSERT IGNORE 是处理重复键冲突的常用“安全阀”。当插入的数据违反主键或唯一约束时,MySQL会悄无声息地忽略这条插入,并返回一个警告(Warning),但语句本身执行成功,不影响后续操作。这在我们批量导入数据、不希望因为个别重复记录导致整个导入失败的场景下非常有用。

然而,在金仓数据库V009R003C011中,虽然也支持 INSERT IGNORE 语法,但其行为细节和反馈信息与MySQL存在值得注意的差异。最直观的一点是错误/警告信息的呈现方式。

让我们通过一个简单的测试表来看看实际效果。假设我们有一个员工表,employee_id 是主键。

-- 创建测试表
CREATE TABLE test_employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- 先插入一条数据
INSERT INTO test_employees VALUES (1, '张三');

现在,我们尝试用 INSERT IGNORE 插入一条主键重复的记录:

在MySQL 8.0.12中执行:

INSERT IGNORE INTO test_employees VALUES (1, '李四');

执行后,MySQL命令行通常会显示:

Query OK, 0 rows affected (0.00 sec)

在SHOW WARNINGS;命令中,你才能看到具体的警告信息,提示重复键冲突。程序层面,affected rows 返回0,但不会抛出异常中断执行。

在金仓数据库中执行同样的语句:

INSERT IGNORE INTO test_employees VALUES (1, '李四');

金仓数据库可能会返回类似这样的信息:

WARNING:  duplicate key value violates unique constraint "test_employees_pkey"
DETAIL:  Key (employee_id)=(1) already exists.
Affected rows: 0

注意:金仓数据库直接将详细的警告信息输出到了结果中,这比MySQL默认不显示更友好。但关键在于,有些数据库驱动或ORM框架对“警告”和“错误”的处理逻辑不同。在MySQL中,这被视为一个可忽略的警告;而在某些配置下,金仓的警告信息可能被客户端驱动解读为需要处理的异常,从而影响程序的逻辑判断。

迁移建议:

  1. 代码审查:检查你的应用代码中,是否依赖于MySQL INSERT IGNORE 返回 affected rows = 0 且不抛异常的行为。如果是,金仓通常能保持兼容。
  2. 日志与监控:金仓更详细的警告输出其实是好事,便于排查。但需要确保你的应用日志系统不会将这些警告误判为错误而触发不必要的警报。
  3. 备选方案:考虑使用 INSERT ... ON CONFLICT DO NOTHING(这是PostgreSQL风格,金仓作为源自PostgreSQL的数据库也支持)作为更标准的替代写法,其语义更清晰,兼容性也更好。

2. 更新与删除的“精确打击”:UPDATE/DELETE ... LIMIT 的陷阱

LIMIT 子句在 SELECT 查询中通用性很高,但在 UPDATE 和 DELETE 语句中,MySQL允许你使用 LIMIT n 来限制受影响的行数,这在处理大表、避免锁表时间过长或进行分批操作时非常方便。例如,我们想给某个部门的前2名员工加薪:

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 101 ORDER BY hire_date LIMIT 2;

在MySQL中,这条语句会精确地只更新最早入职的2名员工。然而,金仓数据库的MySQL兼容模式在早期版本中对DML语句中的LIMIT支持并不完整。直接执行上述语句可能会遇到语法错误。

让我们实测一下。首先准备数据:

-- 假设employees表已有数据,department_id=101的有5条记录
SELECT employee_id, name, hire_date, salary FROM employees WHERE department_id = 101 ORDER BY hire_date;

在MySQL中执行带LIMIT的UPDATE:

UPDATE employees SET salary = salary + 500 WHERE department_id = 101 ORDER BY hire_date LIMIT 2;
-- 返回:Affected rows: 2

成功更新了最早入职的2条记录。

在金仓数据库中执行相同的语句: 你可能会收到一个语法错误,提示在UPDATE语句中LIMIT附近有语法错误。这是因为金仓的核心语法更接近PostgreSQL,而PostgreSQL的UPDATE/DELETE不支持直接使用LIMIT。

那么,在金仓中如何实现同样的“限制更新行数”的功能呢?

这里提供了两种主流且高效的解决方案:

方案一:使用CTE(公共表表达式)与子查询 这是最推荐的方法,清晰且标准。

WITH top_employees AS (
    SELECT employee_id
    FROM employees
    WHERE department_id = 101
    ORDER BY hire_date
    LIMIT 2 -- 在子查询中,SELECT的LIMIT是支持的
)
UPDATE employees e
SET salary = salary + 500
FROM top_employees te
WHERE e.employee_id = te.employee_id;

方案二:使用子查询IN

UPDATE employees
SET salary = salary + 500
WHERE employee_id IN (
    SELECT employee_id
    FROM employees
    WHERE department_id = 101
    ORDER BY hire_date
    LIMIT 2
);

提示:方案二在逻辑上等价,但某些复杂情况下,使用CTE(方案一)在可读性和执行计划优化上可能更有优势。务必在迁移后对这类改写语句进行执行计划分析,确保性能无损。

迁移建议:

  1. 全局搜索:在你的代码库中全局搜索 UPDATE ... LIMIT 和 DELETE ... LIMIT 模式。
  2. 批量操作重写:将找到的语句按照上述方案进行重写。这不仅是为了兼容金仓,也使你的SQL代码更符合SQL标准,提升可移植性。
  3. 事务与锁考虑:原来的UPDATE ... LIMIT在MySQL中可能用于实现“游标式”的批量更新以减少锁竞争。改用子查询方式后,需注意子查询的执行效率和锁的范围,在极端高并发场景下进行测试。

3. “有则更新,无则插入”的两种实现:INSERT ... ON DUPLICATE KEY UPDATE vs REPLACE INTO

这是MySQL中处理“upsert”(更新或插入)操作的两种经典语法,但在金仓中,它们的兼容性和底层行为需要仔细甄别。

3.1 INSERT ... ON DUPLICATE KEY UPDATE

这个语法非常直观:如果插入的数据导致唯一键冲突,就执行后面的UPDATE操作。

MySQL与金仓的兼容性对比:

特性MySQL 8.0.12金仓 V009R003C011说明与建议
语法支持完全支持基本支持金仓在MySQL兼容模式下支持此语法。
返回值affected rows 为1(插入)或2(更新)affected rows 为1(插入或更新)关键差异! MySQL用2表示更新,1表示插入;金仓通常返回1。这会影响依赖返回值判断操作类型的逻辑。
多行插入支持支持语法一致。
VALUES()函数支持在UPDATE子句中使用VALUES(col_name)引用插入值需测试金仓可能不完全支持VALUES()函数,建议在UPDATE子句中直接使用excluded别名(见下方示例)。

金仓中的推荐写法(使用excluded别名):

INSERT INTO employees (employee_id, name, department_id, salary)
VALUES (100, '新员工', 101, 8000)
ON CONFLICT (employee_id) DO UPDATE
SET name = EXCLUDED.name,
    department_id = EXCLUDED.department_id,
    salary = EXCLUDED.salary;

注意:这里使用了 ON CONFLICT ... DO UPDATE,这是PostgreSQL的标准语法,在金仓中具有最好的支持和性能。如果你的目标是金仓数据库,我强烈建议迁移到这种写法,它更标准,语义也更清晰。

3.2 REPLACE INTO 的“暗雷”

REPLACE INTO 的逻辑是:如果新行与表中的旧行在唯一键上冲突,则在插入新行之前先删除旧行。这听起来简单,但却隐藏着巨大的风险。

风险点:外键约束和删除触发器。 因为 REPLACE INTO 实质是先 DELETE 再 INSERT。如果表上有外键约束,且被其他表引用,DELETE 动作可能因违反外键约束而失败。即使外键约束被暂时禁用,DELETE 操作也会触发表上的 ON DELETE 触发器,这可能导致意想不到的副作用,比如级联删除其他关联数据或写入审计日志。

实测对比: 假设 employees 表被 employee_projects 表通过外键引用。

在MySQL中:

REPLACE INTO employees (employee_id, name) VALUES (1, 'New Name');
  • 如果外键约束开启且存在引用,直接失败。
  • 如果先 SET FOREIGN_KEY_CHECKS=0;,则执行成功,但 DELETE 动作可能被阻塞或引发触发器。

在金仓中: 行为类似,但关闭外键约束的语法是 SET session_replication_role = replica;(或类似设置,取决于配置),与MySQL的 SET foreign_key_checks=0 不同。这本身就是另一个需要适配的点。

迁移建议:

  1. 弃用 REPLACE INTO:在迁移到金仓(或任何其他数据库)时,我建议将所有的 REPLACE INTO 重构为 INSERT ... ON CONFLICT ... DO UPDATE(金仓/PostgreSQL)或 INSERT ... ON DUPLICATE KEY UPDATE(MySQL兼容写法)。后者语义更安全,它只是更新,不会触发删除。
  2. 彻底检查:全局搜索代码中的 REPLACE INTO,分析其上下文,评估将其改为upsert操作是否会影响业务逻辑(特别是依赖删除触发器的逻辑)。
  3. 理解副作用:向团队明确说明 REPLACE INTO 的“先删后插”机制及其潜在风险,避免在新代码中使用。

4. 数据高速加载:LOAD DATA INFILE 的语法“微调”

从文件批量导入数据是ETL和运维中的常见操作。MySQL的 LOAD DATA INFILE 功能强大,金仓也提供了兼容支持,但存在一个关键的语法差异。

MySQL的标准写法:

LOAD DATA INFILE '/tmp/data.csv'
INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(column1, column2, column3); -- 指定目标列

金仓数据库中的写法:

LOAD DATA INFILE '/tmp/data.csv'
INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
-- 注意:这里不能指定列列表 (column1, column2, column3)

差异核心: 金仓的 LOAD DATA INFILE 语句不支持在语句末尾指定目标列列表。它要求CSV文件中的列顺序必须与目标表的列顺序完全一致。

这带来了两个迁移挑战:

  1. 列顺序依赖:你的CSV文件必须严格按照表定义的列顺序来组织数据。
  2. 默认值与空列:如果CSV文件列数少于表列数,后面的列会被设置为默认值或NULL。你需要确保这符合业务预期。

迁移适配方案:

  • 方案A:调整CSV文件或表结构 使文件列顺序与表列顺序匹配。这是最直接的方法。

  • 方案B:使用中间表或临时表 如果无法改变文件结构,可以创建一个列顺序与文件匹配的临时表,先导入到临时表,再用 INSERT INTO ... SELECT ... 语句将数据映射到目标表。

    -- 1. 创建临时表,列顺序和类型与CSV文件对齐
    CREATE TEMP TABLE temp_import (col_file_a INT, col_file_b VARCHAR, col_file_c DATE);
    
    -- 2. 将数据加载到临时表
    LOAD DATA INFILE '/tmp/data.csv' INTO TABLE temp_import ...;
    
    -- 3. 插入到目标表,进行列映射和转换
    INSERT INTO my_target_table (target_col1, target_col2, target_col3)
    SELECT col_file_b, col_file_a, col_file_c FROM temp_import;
    
  • 方案C:使用金仓的 COPY 命令 金仓作为PostgreSQL系数据库,原生支持更强大的 COPY 命令,它允许指定列。

    COPY my_table (column1, column2, column3) FROM '/tmp/data.csv' WITH (FORMAT csv, DELIMITER ',', HEADER false);
    

    COPY 命令通常在性能和功能上更优,是迁移后更推荐的数据加载方式。

重要提示:无论采用哪种方案,在迁移后都必须对数据加载流程进行完整的回归测试,确保数据完整性和准确性。

5. 聚合查询的“维度上卷”:GROUP BY ... WITH ROLLUP 的替代方案

WITH ROLLUP 是MySQL中用于生成分级汇总报告(小计和总计)的便捷操作。例如,按部门和职位统计薪资总和,并生成部门小计和全局总计。

MySQL中的写法:

SELECT department_id, job_title, SUM(salary) as total_salary
FROM employees
GROUP BY department_id, job_title WITH ROLLUP;

结果会包含:

  • 每个部门、每个职位的明细汇总行。
  • 每个部门所有职位的汇总行(job_title为NULL)。
  • 所有部门、所有职位的总计行(department_id和job_title均为NULL)。

在金仓数据库中,原生的MySQL兼容模式可能不完全支持 WITH ROLLUP 语法,或者其返回结果集的格式(如NULL值的位置)可能与MySQL存在细微差别,导致依赖结果集格式的应用程序解析出错。

金仓中的标准替代方案:使用 GROUPING SETS 或 UNION ALL

GROUPING SETS 是SQL标准语法,功能比 WITH ROLLUP 更强大、更灵活,金仓完全支持。

使用 GROUPING SETS 实现同等效果:

SELECT department_id, job_title, SUM(salary) as total_salary
FROM employees
GROUP BY GROUPING SETS (
    (department_id, job_title), -- 明细分组
    (department_id),            -- 部门小计
    ()                          -- 总计
)
ORDER BY department_id NULLS LAST, job_title NULLS LAST;

为了更清晰地理解 GROUPING SETS 的构成,下表展示了其每个集合对应的业务含义:

GROUPING SETS 子项聚合维度生成的行类型对应ROLLUP层级
(department_id, job_title)部门 + 职位明细汇总行最细粒度
(department_id)仅部门部门小计行 (job_title为NULL)第一级上卷
()无全局总计行 (两列均为NULL)最上级总计

使用 GROUPING() 函数区分汇总行: 在结果中,如何区分是小计行的NULL还是原本数据就是NULL?SQL标准提供了 GROUPING() 函数。

SELECT
    department_id,
    job_title,
    SUM(salary) as total_salary,
    GROUPING(department_id) as dept_grouped,
    GROUPING(job_title) as title_grouped
FROM employees
GROUP BY GROUPING SETS ((department_id, job_title), (department_id), ())
ORDER BY GROUPING(department_id), department_id, GROUPING(job_title), job_title;

GROUPING(col) 函数在列 col 因聚合被置为NULL时返回1,否则返回0。这样应用程序就能准确识别每一行的汇总级别。

迁移建议:

  1. 语法替换:将 WITH ROLLUP 替换为 GROUPING SETS。后者是SQL标准,可移植性更好,功能也更强大(可以定义任意组合的分组集)。
  2. 结果处理逻辑适配:检查应用程序中处理查询结果的部分。原来可能通过判断特定列是否为NULL来识别小计/总计行。现在需要改为利用 GROUPING() 函数的返回值,或者根据新的、更明确的排序规则来解析。
  3. 测试验证:对改写后的聚合查询进行充分测试,确保生成的汇总行数量、顺序以及数值与MySQL原结果完全一致。

迁移数据库不仅仅是运行一个转换工具,更是对应用与数据库交互细节的一次深度梳理。金仓数据库在语法层面的高度兼容,为我们降低了迁移门槛,但正是这些细微的差异,决定了迁移的成败与稳定性。我的经验是,提前识别并制定好这五大关键点的改造策略,能避免项目后期的大量返工和线上风险。最好的办法是在测试环境建立一套完整的SQL脚本回归测试集,覆盖所有核心业务查询和DML操作,在迁移前后进行比对,确保万无一失。

MySQL开发者必看:金仓数据库V009R003C011迁移实战中的5个关键差异点 本文针对MySQL开发者迁移至金仓数据库V009R003C011版本的实际需求,深入剖析了实战中五个关键差异点。重点分析了DML语句反馈机制、UPDATE/DELETE与LIMIT语法、数据加载、外键约束处理以及系统函数与事务锁机制等方面的核心区别,并提供了具体的解决方案和代码示例,旨在帮助开发者规避迁移陷阱,实现平滑过渡。 阅读详情

相关推荐

MySQL开发者必看:金仓数据库V009R003C011迁移实战避坑指南

本文为MySQL开发者提供了迁移至金仓数据库V009R003C011版本的实战避坑指南。文章深入剖析了迁移过程中的核心挑战,重点对比了金仓数据库与MySQL在DML语句、外键约束、自增列、存储过程等关键方面的兼容性差异,并给出了具体的解决方案与性能调优建议,旨在帮助开发者实现平滑、高效、稳定的数据库迁移。

rain6的博客 179

【金仓数据库实战解析】_MySQL兼容性测试中的关键差异与优化策略

本文深入分析了金仓数据库与MySQL在兼容性测试中的关键差异与优化策略。重点探讨了DML操作、数据查询语句的兼容性问题,并提供了性能优化建议,帮助开发者高效迁移和使用金仓数据库。

weixin_30736301的博客 470

【金仓数据库产品体验官】_从实践看金仓数据库与 MySQL 的兼容性

本文对比测试了金仓数据库(MySQL兼容版)与MySQL 8.0在DML操作和数据查询方面的兼容性。测试涵盖INSERT IGNORE、LIMIT子句、INSERT ON DUPLICATE KEY UPDATE、REPLACE INTO等DML操作,以及GROUP BY WITH ROLLUP查询。结果显示,金仓数据库基本兼容MySQL语法,但在外键约束处理(REPLACE INTO需手动关闭约束)、警告提示(INSERT IGNORE返回warning)等细节存在差异。测试环境为MySQL 8.

weixin_42329915的博客 783

【金仓数据库实战解析】_关键DML操作与MySQL兼容性深度对比

本文深入对比了金仓数据库与MySQL在关键DML操作上的兼容性差异,包括INSERT、UPDATE、DELETE等操作的语法细节和返回值差异。通过实际案例解析,帮助开发者在数据库迁移过程中避免兼容性问题,提升工作效率。特别关注了外键约束、批量操作等常见场景的兼容性处理。

weixin_42683394的博客 408

全栈赋能 信创基石:KingbaseES V9 全平台企业级部署实战解析

金仓数据库KingbaseES V009R001C010版本(以下简称“C010版本”)正式发布,聚焦核心业务平滑迁移、运维效率提升、生态适配领域,为企业提供更可靠、更易用的国产数据库解决方案。

LFCuiYs的博客 1505

MySQL迁移人大金仓必看!SpringBoot项目适配完整流程(含大小写敏感解决方案)

本文详细介绍了将MySQL数据库迁移至人大金仓数据库的完整流程,包括环境准备、数据迁移、SpringBoot配置调整及大小写敏感问题解决方案。特别针对银河麒麟系统和Linux环境下的部署与优化提供了实用指南,帮助开发者高效完成国产化替代任务。

weixin_30836759的博客 134

金仓数据库在线体验平台:开启国产数据库云端探索之旅

在数据库技术版图加速重构的当下,金仓数据库(KingbaseES)正以兼容多生态的「破壁者」姿态闯入开发者视野。其在线体验平台打造的MySQL模式,如同为技术探索者架起一座「零门槛」桥梁——无需本地部署的轻量化特性,让开发者能像拆解精密仪器般,直观验证国产数据库与MySQL生态的适配密码。本文将以电商场景为实验场,从功能咬合度、语法兼容性到事务处理能力展开实测,为国产数据库技术迁移提供可触摸的实践样本。

倔强的石头的博客 1万+

国央企创新负责人如何通过平台提升技术需求挖掘与资源配置的精准性?.docx

国央企创新负责人如何通过平台提升技术需求挖掘与资源配置的精准性?

从实践看金仓数据库与 MySQL 的兼容性

为了验证金仓数据库(MySQL兼容版)和 MySQL 数据库在以下 DML 操作 和 数据查询 语句的兼容性,我通过以下测试来确保两者的兼容性:

weixin_42329915的博客 555

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。

双向全桥CLLC谐振变换器仿真模型(Simulink仿真实现)

内容概要:本文系统介绍了双向全桥CLLC谐振变换器的Simulink仿真模型,重点阐述了变频控制、闭环仿真及其与多种电力电子拓扑(如维也纳整流器、DAB变换器、图腾柱PFC等)的联合仿真设计。资源包涵盖2.5kW双向全桥LLC、V2G电动汽车充放电系统、三相PFC、多相交错LLC等多种变换器的仿真案例,并深入展示了三电平VIENNA整流器在双闭环PI控制与SVPWM调制策略下,结合上下电容电压差值补偿实现中点电位平衡的先进控制方法。通过仿真验证,该策略不仅有效维持了800V直流母线电压的稳定,还在动态工况下显著提升了电容电压的均衡度,同时保持了较低的输入电流THD,充分体现了SVPWM与中点平衡控制协同优化的技术优势。; 适合人群:具备电力电子与自动控制理论基础,从事新能源发电、电动汽车、工业电源、微电网等领域的研究生、工程师及科研人员。; 使用场景及目标:① 学习并构建高频谐振变换器(如LLC、CLLC)的Simulink仿真模型,掌握其变频与混合控制策略;② 深入理解并应用中点电位平衡、双闭环PI控制、SVPWM调制等核心技术于VIENNA等三电平变换器中;③ 复现高水平期刊论文中的控制算法,服务于科研项目申报、学术论文撰写或工程产品开发。; 阅读建议:该资源为综合性仿真资料库,建议使用者结合自身研究方向(如电动汽车充电、新能源并网)选择对应案例进行精学,重点关注控制策略的设计逻辑、仿真参数的整定方法以及SVPWM与中点平衡的协同机制,并充分利用附带的计算书和参考文献深化理解,以实现从仿真模型到实际工程应用的顺利转化。

【金仓数据库产品体验官】从兼容到进阶:驱动直连、窗口函数与动态 SQL 实测——KingbaseES V9R3C18 深度体验(二)

摘要: 本文在鲲鹏服务器(aarch64 + Ubuntu 22.04)上测试了KingbaseES V9R3C18(MySQL兼容版)的连接方式、分析功能和动态SQL能力。测试表明,尽管SQL语法层兼容MySQL,但协议层仍基于PostgreSQL,MySQL原生客户端无法连接,需替换为Kingbase或PostgreSQL驱动。窗口函数测试(如ROW_NUMBER()、RANK()、LAG()等)完全兼容,表现良好。动态SQL中PREPARE/EXECUTE基本支持,但占位符语法与MySQL存在差异,需

笃行其道的博客 1万+

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

【金仓数据库征文】M4 Mac上把Spring Boot + MyBatis接到KingbaseES:一次带事务和并发扣库存的实测

本文以一套商品库存与订单服务为例,记录我在 M4 Mac 上使用 Docker 原生 ARM64 镜像部署 KingbaseES,并通过 Spring Boot 3.5、MyBatis 3.0 和官方 JDBC 驱动完成应用适配的全过程。文章不仅覆盖环境准备、建库建表、数据源配置、主键回填、分页及 CRUD,还通过库存不足和双请求抢购场景,实测事务回滚与原子扣库存是否可靠。同时复盘容器权限、驱动依赖、AUTO_INCREMENT、保留字和标识符大小写等常见迁移问题,并给出排查思路与解决方案,提供可行方案。

承于所学,探技术之渊;以代码求政,寻成长之道。 2万+

虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型(simulink仿真实现)

内容概要:本文提供了“虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型”的Simulink仿真实现方法,系统阐述了如何通过仿真手段研究VSG在电力系统中的动态响应特性,重点聚焦于其惯量与阻尼的自适应控制策略。文中详细说明了模型构建流程,涵盖控制算法设计、参数调节、根轨迹分析等内容,并通过对比不同调节系数下的系统响应,深入探讨了控制参数对系统稳定性与动态性能的影响。该仿真模型有效复现了VSG模拟传统同步发电机惯性与阻尼特性的能力,对于提升新能源并网系统的频率稳定性和抗扰动能力具有重要研究价值。; 适合人群:具备电力系统、自动化或相关领域基础知识,从事新能源并网、微电网控制、电力电子与电力系统仿真研究的研究生、科研人员及工程师。; 使用场景及目标:①用于教学与科研中深入理解虚拟同步发电机的工作原理及其在现代电力系统中的应用;②为新能源发电系统接入电网时的稳定性分析与控制策略设计提供仿真验证平台;③支持对VSG控制参数进行优化,提升系统应对负荷波动和扰动的能力。; 阅读建议:建议读者结合Matlab/Simulink软件动手实践,按照文档结构逐步搭建仿真模型,重点关注控制环路设计与参数整定部分,同时参考提供的代码与仿真结果进行对比分析,以加深对VSG自适应控制机制的理解。

基于mediapipe的动作捕捉和人物模型的驱动

我实习做这个的时候,当时也找了很多资料,但很多资料都没有讲透,下面我就总结一下自己结合看代码后的感悟,还有一些我认为很重要的点。

qq_58484580的博客 7712

人大金仓数据库在银河麒麟系统下的SpringBoot集成实践

本文详细介绍了人大金仓数据库在银河麒麟系统下的SpringBoot集成实践,包括数据库安装、数据迁移技巧以及SpringBoot配置全流程。重点讲解了JDBC驱动配置、数据源关键参数设置和性能优化方案,帮助开发者高效完成国产数据库与SpringBoot的集成部署。

weixin_29209805的博客 123

Springboot+Vue 实现鸿蒙商城管理系统开发实践

通过使用 Springboot 和 Vue 技术栈,我们成功实现了鸿蒙商城管理系统的开发。系统具备用户管理、商品管理、订单管理、库存管理和统计分析等功能,支持 Web 端和鸿蒙端的访问和操作。在开发过程中,我们充分利用了 Springboot 的快速开发优势和 Vue 的组件化开发特点,提高了开发效率和系统的可维护性。同时,通过与鸿蒙设备的集成,实现了多设备之间的数据交互和协同工作,提升了用户体验。

ZXJ_SXT的博客 1325

抢先体验:人大金仓数据库管理系统KingbaseES V9 最新版本 CentOS 7.9 部署体验

KingbaseES 是中国人大金仓信息技术股份有限公司自主研发的一款通用关系型数据库管理系统(RDBMS)。 作为国产数据库的杰出代表,它专为中国市场设计,广泛应用于政府、金融、能源、电信等关键行业,以高安全性、高可用性和高性能著称,充分满足中国信息技术领域自主可控的战略需求。

Stayhungry,Stayfoolish. 4188

Android SSL证书固定实战:原理、方案与避坑指南

SSL/TLS协议是保障网络通信安全的基石,其核心原理是通过非对称加密和数字证书实现身份认证与数据加密。在移动应用开发中,为了防止中间人攻击,证书固定技术应运而生,它通过将服务器证书或公钥的哈希值预置在应用内,强制校验服务器身份,从而大幅提升通信链路的安全性。这一技术对于金融、电商等高安全要求场景尤为重要。本文聚焦Android平台,深入解析SPKI固定、Network Security Configuration与OkHttp CertificatePinner等主流方案,并针对证书更新、调试兼容等常见痛

weixin_33935636的博客 405

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

金仓数迁平台 KDTS 初体验:高效迁移的秘诀

KDTS 是一款专为用户设计的数据库数据迁移平台,它能够将数据从 Oracle、MySQL、SQL Server、Gbase、PostgreSQL、DM、KingbaseES 等数据库平滑迁移至 KingbaseES 数据库。支持迁移对象,包括但不限于表、视图、序列、函数、存储过程、同义词、触发器和注释,具体支持对象会根据源数据库的不同而有所差异。在当今数据驱动的时代,数据库迁移是一个复杂而又至关重要的过程。迁移过程中,用户可以在可视化界面查看迁移进度,也可以在后台查看 KDTS 日志,监控迁移进度。

少安事务所 2290

【JS】自定义上传组件,文件上传与回显,自定义进度条显示(基于element-plus与axios)

公司是做B 端产品的,有sass平台也有源码交付的项目,最近开发了很多小系统,这里记录一下开发遇到的问题。 需要定制一个上传组件,要求可以自定义文件存储路径,自定义可上传的文件类型,限制文件大小等,并且提供基础的文件回显功能,例如上传一张图片到服务器指定目录的`/file`文件夹下面,并且实现可以查看预览的功能。

余浩的博客 1163
上一篇: PyTorch与torch_geometric版本冲突?手把手教你解决‘default‘属性错误
下一篇: 【ZED】深入解析ZED相机标定:从张氏标定法到实战优化
Python
博客等级 码龄26年 1973粉丝 1567原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值