java每日精进 2.13 MySql迁移人大金仓
1.迁移数据库
1. 数据库创建语句
- MySQL:
CREATE DATABASE dbname;
- 人大金仓(Kingbase):
- 在人大金仓中,
CREATE DATABASE
的语法通常相同,但可能需要特别注意字符集的指定(如果涉及到多语言支持等),人大金仓默认使用UTF-8
编码。
CREATE DATABASE dbname ENCODING='UTF8';
- 在人大金仓中,
2. 数据类型差异
-
BOOLEAN
类型:- MySQL 将
BOOLEAN
映射为TINYINT(1)
,而 人大金仓 使用BOOLEAN
类型(与 PostgreSQL 相同)。 - MySQL:
CREATE TABLE example (flag BOOLEAN);
- 人大金仓:
CREATE TABLE example (flag BOOLEAN);
- MySQL 将
-
AUTO_INCREMENT
和SERIAL
:- MySQL 使用
AUTO_INCREMENT
来定义自增字段,而 人大金仓 使用SERIAL
。 - MySQL:
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY);
- 人大金仓:
CREATE TABLE users (id SERIAL PRIMARY KEY);
- MySQL 使用
-
TEXT
类型:- 在 MySQL 中,
TEXT
是可以存储长文本的类型,而 人大金仓(基于 PostgreSQL)也使用TEXT
,但它支持更复杂的文本操作。 - MySQL:
CREATE TABLE article (content TEXT);
- 人大金仓:
CREATE TABLE article (content TEXT);
- 在 MySQL 中,
-
ENUM
类型:- MySQL 支持
ENUM
类型,但人大金仓没有直接支持这个类型。如果需要在人大金仓中使用ENUM
,可以考虑使用CHECK
约束或者VARCHAR
类型,并加上合理的值限制。 - MySQL:
CREATE TABLE example (status ENUM('active', 'inactive'));
- 人大金仓:
CREATE TABLE example (status VARCHAR(10) CHECK (status IN ('active', 'inactive')));
- MySQL 支持
-
DATETIME
和TIMESTAMP
:- MySQL 中有
DATETIME
和TIMESTAMP
类型,而 人大金仓 使用TIMESTAMP
,它的表现可能有所不同。人大金仓会根据 PostgreSQL 的规范处理TIMESTAMP
类型,可能需要特别关注时区问题。 - MySQL:
CREATE TABLE events (event_time DATETIME);
- 人大金仓:
CREATE TABLE events (event_time TIMESTAMP);
- MySQL 中有
3. 表的引擎设置
- MySQL 使用
ENGINE
来指定表的存储引擎(如InnoDB
、MyISAM
等)。 - 人大金仓(PostgreSQL)不使用
ENGINE
语法,所有表都使用统一的存储引擎,所以需要删除这些与存储引擎相关的配置。 - MySQL:
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
- 人大金仓:
CREATE TABLE users (id INT SERIAL PRIMARY KEY);
4. 外键约束与索引
- MySQL 支持外键约束,人大金仓也支持,但语法上可能有些许差异(尤其是在删除/更新外键时的行为可能有所不同)。
- MySQL:
CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) );
- 人大金仓:
CREATE TABLE orders ( order_id SERIAL PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) );
5. 字符串处理函数
- MySQL 中的一些字符串处理函数与 人大金仓 中的函数可能不完全一样。例如:
- MySQL:
SELECT CONCAT(first_name, ' ', last_name) FROM users;
- 人大金仓:
SELECT first_name || ' ' || last_name FROM users;
- MySQL:
6. 注释和分隔符
- MySQL 支持
--
和#
注释样式,但人大金仓使用--
或/* */
。 - MySQL:
-- This is a comment # Another comment
- 人大金仓:
-- This is a comment /* Another comment */
7. LIMIT
与 FETCH
- MySQL 使用
LIMIT
来限制查询的行数。 - 人大金仓(PostgreSQL)也使用
LIMIT
,但在某些情况下,特别是涉及OFFSET
时,可能需要调整语法。 - MySQL:
SELECT * FROM users LIMIT 10;
- 人大金仓:
SELECT * FROM users LIMIT 10;
8. 日期与时间函数
- MySQL 提供许多日期和时间函数,如
NOW()
,CURDATE()
等。 - 人大金仓 也有类似的函数,但它们的名称和语法可能有所不同。例如,
CURRENT_TIMESTAMP
是标准的 SQL 函数。 - MySQL:
SELECT NOW();
- 人大金仓:
SELECT CURRENT_TIMESTAMP;
9. 触发器和存储过程
- MySQL 和人大金仓都支持触发器和存储过程,但语法上有所不同。存储过程和函数在 MySQL 中使用
DELIMITER
来指定分隔符,而人大金仓不需要使用DELIMITER
,直接定义即可。 - MySQL:
DELIMITER $$ CREATE PROCEDURE my_procedure() BEGIN SELECT 'Hello, World'; END$$ DELIMITER ;
- 人大金仓:
CREATE OR REPLACE PROCEDURE my_procedure() AS BEGIN RAISE NOTICE 'Hello, World'; END;
10. SQL 调试和测试
在迁移过程中,建议使用人大金仓提供的调试工具,逐步测试每个 SQL 语句,检查是否有语法或功能上的问题,特别是与数据类型、函数、触发器等相关的部分。
总结:
要将 MySQL 的 .sql
文件修改成能在人大金仓中运行的文件,主要的调整集中在以下几个方面:
- 替换 MySQL 特有的数据类型和关键字(如
AUTO_INCREMENT
→SERIAL
)。 - 删除与存储引擎相关的配置(如
ENGINE=InnoDB
)。 - 替换不兼容的函数(如字符串拼接、日期函数等)。
- 根据人大金仓的 SQL 标准调整外键和约束的语法。
- 确保注释和分隔符的语法符合人大金仓的规范。
在修改完成后,建议在人大金仓的测试环境中运行 SQL 文件,确保没有语法错误或功能冲突。
举例:
Mysql:
CREATE TABLE `member` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`ip` varchar(255) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`app_id` varchar(255) DEFAULT NULL,`group_id` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Kingbase:
CREATE TABLE "member" ("id" BIGSERIAL NOT NULL, -- 使用 BIGSERIAL 替代 AUTO_INCREMENT"create_time" TIMESTAMP DEFAULT NULL,-- 使用 TIMESTAMP 替代 datetime"update_time" TIMESTAMP DEFAULT NULL,"ip" VARCHAR(255) DEFAULT NULL,"name" VARCHAR(255) DEFAULT NULL,"app_id" VARCHAR(255) DEFAULT NULL,"group_id" VARCHAR(255) DEFAULT NULL,PRIMARY KEY ("id")
);
2.配置数据
人大金仓使用sql编辑器执行和导入脚本;

3.配置文件修改
原来的application.yml如下:
spring:jpa:database: mysqlshow-sql: truehibernate:ddl-auto: updatenaming:physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategydatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialect #不加这句则默认为myisam引擎profiles:active: ${ENV:local}
logging:file: ./logback.log
server:port: 8888
修改后如下:
spring:jpa:show-sql: truehibernate:ddl-auto: updatenaming:physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategydatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialect # 使用人大金仓兼容的Mysql的方言profiles:active: ${ENV:local} # 默认激活 local 配置文件
logging:file: ./logback.log
server:port: 8888
application-local.yml
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/blockchain_manager?autoReconnect=true&useUnicode=true&useSSL=falseusername: rootpassword: 123456
修改后:
spring:datasource:url: jdbc:kingbase8://localhost:54321/database8 # 人大金仓数据库的连接 URLusername: **** # 人大金仓数据库的用户名password: **** # 人大金仓数据库的密码driver-class-name: com.kingbase8.Driver # 人大金仓数据库的驱动类
application-prod.yml:
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://${MYSQL_URL}/blockchain_manager?autoReconnect=true&useUnicode=trueusername: mdpassword: ${MYSQL_PASS}
server:port: 8080
修改后:
spring:datasource:url: jdbc:kingbase8://${KINGBASE_URL}:54321/blockchain_manager # 人大金仓数据库的连接 URLusername: SYSTEM # 人大金仓数据库的用户名password: ${KINGBASE_PASS} # 人大金仓数据库的密码driver-class-name: com.kingbase8.Driver # 人大金仓数据库的驱动类
server:port: 8080
application-prod.yml 中的KINGBASE_URL以及KINGBASE_PASS在生产环境中设置环境变量即可;
可以通过终端设置环境变量。比如,如果你使用的是 bash
或 zsh
,可以在终端中使用以下命令设置环境变量:
export KINGBASE_URL=your_kingbase_url
export KINGBASE_PASS=your_kingbase_password
如果你希望在每次启动终端时都能自动设置这些环境变量,可以将这些命令添加到 ~/.bashrc
(或者 ~/.zshrc
)文件中:
echo "export KINGBASE_URL=your_kingbase_url" >> ~/.bashrc
echo "export KINGBASE_PASS=your_kingbase_password" >> ~/.bashrc
注:如何在 Spring Boot 中引用环境变量
在 application-prod.yml
文件中引用环境变量时,Spring Boot 会自动解析环境变量并将其替换。例如:
spring:datasource:url: jdbc:kingbase8://${KINGBASE_URL}:54321/blockchain_managerusername: SYSTEMpassword: ${KINGBASE_PASS}driver-class-name: com.kingbase8.Driver
相关文章:

java每日精进 2.13 MySql迁移人大金仓
1.迁移数据库 1. 数据库创建语句 MySQL: CREATE DATABASE dbname; 人大金仓(Kingbase): 在人大金仓中,CREATE DATABASE 的语法通常相同,但可能需要特别注意字符集的指定(如果涉及到多语言支持…...

【R语言】回归分析与判别分析
一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…...
ES6中Object.defineProperty 的详细用法和使用场景以及例子
ES6 Object.defineProperty() 用法总结 Object.defineProperty() 是 ES5 引入的一个方法,ES6 继续强化了该方法的使用,它允许我们为对象的属性定义或修改 属性描述符。它能够控制对象属性的行为,如读写权限、可枚举性和可配置性。 1. Objec…...

揭秘云计算 | 5、关于云计算效率的讨论
一、 公有云效率更高? 解:公有云具有更高的效率。首先我们需要知道效率到底指的是什么。这是个亟须澄清的概念。在这里效率是指云数据中心(我们将在后文中介绍其定义)中的IT设备资源利用率,其中最具有代表性的指标就是…...

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解
Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 前面我们已经将进程通信部分讲完了,现在我们来讲一个进程部分也非常重要的知识点——信号,信号也是进程间通信的一…...
如何查询网站是否被百度蜘蛛收录?
一、使用site命令查询 这是最直接的方法。在百度搜索框中输入“site:你的网站域名”,例如“site:example.com”(请将“example.com”替换为你实际的网站域名)。如果搜索结果显示了你的网站页面,并且显示了收录的页面数量…...

什么是网络安全审计?网络安全审计的作用...
网络安全审计通过对网络数据的采集、分析、识别,实时动态监测通信内容、网络行为和网络流量,发现和捕获各种敏感信息、违规行为,实时报警响应,全面记录网络系统中的各种会话和事件,实现对网络信息的智能关联分析、评估…...

EasyExcel实现excel导入(模版上传)
目录 效果pom.xmlapplication.ymlcontrollerservice依赖类前台vue代码某个功能如果需要添加大量的数据,通过一条条的方式添加的方式,肯定不合理,本文通过excel导入的方式来实现该功能,100条数据导入成功85条,失败15条,肯定需要返回一个表格给前台或者返回1个错误excel给前…...

Vue 3最新组件解析与实践指南:提升开发效率的利器
目录 引言 一、Vue 3核心组件特性解析 1. Composition API与组件逻辑复用 2. 内置组件与生命周期优化 3. 新一代UI组件库推荐 二、高级组件开发技巧 1. 插件化架构设计 2. 跨层级组件通信 三、性能优化实战 1. 惰性计算与缓存策略 2. 虚拟滚动与列表优化 3. Tree S…...

【前端】如何安装配置WebStorm软件?
文章目录 前言一、前端开发工具WebStorm和VS Code对比二、官网下载三、安装1、开始安装2、选择安装路径3、安装选项4、选择开始菜单文件夹5、安装成功 四、启动WebStorm五、登录授权六、开始使用 前言 WebStorm 是一款由 JetBrains 公司开发的专业集成开发环境(IDE…...
vllm专题(一):安装-GPU
vLLM 是一个 Python 库,支持以下 GPU 变体。选择您的 GPU 类型以查看供应商特定的说明: 1. NVIDIA CUDA vLLM 包含预编译的 C++ 和 CUDA(12.1)二进制文件。 2. AMD ROCm vLLM 支持配备 ROCm 6.3 的 AMD GPU。 注意 此设备没有预构建的 wheel 包,因此您必须使用预构建的 Do…...

php文件包含
文章目录 基础概念php伪协议什么是协议协议的格式php中的协议file协议http协议ftp协议php://input协议php://filter协议php://data协议 php文件上传机制高级文件包含nginx文件日志包含临时文件包含session文件包含pear文件包含远程文件包含 基础概念 文件包含,相当…...

升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?
随着 Spring Boot 3 的发布,许多开发者开始考虑将他们的项目升级到这个新版本。Spring Boot 3 带来了许多新特性和改进,尤其是在 HTTP 请求处理方面。本文将详细介绍如何在 Spring Boot 3 中发送 HTTP 请求,并通过代码示例帮助你快速上手。 …...

分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现 目录 分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现MFO-LSSVM飞蛾扑火算法优化最小二…...

MyBatis Plus核心功能
一、条件构造器 1.为什么要学? 用于方便地构建SQL查询条件 2.如何使用? 3.实战案例 例:查询出名字中带o的,存款大于等于1000元的人的id,username,info,balance字段 数据库如图: 示例: Test void testL…...
nginx ngx_http_module(10) 指令详解
nginx ngx_http_module(10) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_v2_module:HTTP/2支持模块,允许Nginx通过HTTP/2协议与客户端进行通信。HTTP/2带来了许多性能优化,如多路复用、头部压缩和服务器推…...

【ENSP】链路聚合的两种模式
【ENSP】链路聚合的两种模式 1、背景介绍2、链路聚合的使用场景3、配置过程1、手工模式Eth-Trunk配置2、静态LACP模式Eth-Trunk 4、总结 1、背景介绍 随着网络规模的不断扩大,人们对骨干链路的带宽吞吐量和可靠性提出了越来越高的要求。在传统方案中,为…...

Windows环境安装部署minimind步骤
Windows环境安装部署minimind步骤 必要的软件环境 git git,可下载安装版,本机中下载绿色版,解压到本地目录下(如:c:\soft\git.win64),可将此路径添加到PATH环境变量中,供其他程序…...
让大模型帮我设计crnn网络及可运行demo,gpt4o豆包qwendeepseek-r1
prompt 使用 crnn 提取图像特征,给出图像好坏的二分类结果,写清楚代码备注,注释清楚向量维度大小,并给出一个可运行的 demo1、GPT-4o 以下是一个使用 CRNN(Convolutional Recurrent Neural Network)提取图…...
代码随想录-- 第一天图论 --- 岛屿的数量
99 统计岛屿的数量 c 99. 岛屿数量 #include <iostream> #include <vector> #include <queue>using namespace std;struct MGraph {int numVertices, numEdges;vector<vector<int>> Edge; };int dir[4][2] {{1, 0}, {0, 1}, {-1, 0}, {0, -1}…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...