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}…...
5分钟快速上手taskt:免费开源的终极RPA办公自动化神器
5分钟快速上手taskt:免费开源的终极RPA办公自动化神器 【免费下载链接】taskt taskt (pronounced tasked and formely sharpRPA) is free and open-source robotic process automation (rpa) built in C# powered by the .NET Framework 项目地址: https://gitcod…...
Allegro 16.6出Gerber避坑指南:从钻孔表到槽孔,新手必看的5个细节
Allegro 16.6出Gerber避坑指南:从钻孔表到槽孔,新手必看的5个细节 第一次使用Allegro 16.6输出Gerber文件时,那种既兴奋又忐忑的心情我至今记忆犹新。作为PCB设计流程中的关键环节,Gerber文件的质量直接决定了最终电路板的成败。本…...
探索异端代码仓库:从设计哲学到工程实践的深度解析
1. 项目概述:一个“异端”的代码仓库在GitHub上,p-e-w/heretic这个项目名本身就充满了故事感。heretic,意为“异端”,在软件开发领域,这通常指向那些挑战主流范式、探索非传统路径的代码库。它不是某个知名框架的官方插…...
Ollama MCP Server:为AI助手扩展本地大模型能力的完整指南
1. 项目概述:Ollama MCP Server,为你的AI助手注入本地大模型之力 如果你和我一样,日常重度依赖Claude Desktop、Cursor或者Windsurf这类AI编程助手,那你肯定也遇到过这样的痛点:想让它调用你本地部署的Ollama模型来处…...
Windows上安装安卓应用:APK安装器的全新体验
Windows上安装安卓应用:APK安装器的全新体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK安装器是一款专为Windows系统设计的安卓应用安装工具&#…...
Iwara下载工具:解锁视频下载的智能解决方案
Iwara下载工具:解锁视频下载的智能解决方案 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool 你是否曾在Iwara平台上遇到心仪的视频却无法保存的困扰?Iwar…...
ARM NEON与VFP向量指令集优化指南
1. ARM NEON与VFP技术概述 在移动计算和嵌入式系统领域,ARM架构凭借其出色的能效比占据主导地位。随着多媒体处理、机器学习等计算密集型任务的普及,传统的标量指令集已难以满足性能需求。NEON和VFP作为ARM架构的SIMD(单指令多数据࿰…...
深入理解 Python 进程池:从 Future 到 as_completed 的完整指南
一、为什么需要进程池? Python 的 GIL(全局解释器锁)使得同一时刻只有一个线程能执行 Python 字节码,这意味着多线程在 CPU 密集型任务上几乎无法获得真正的并行加速。要绕过 GIL,就必须使用多进程。 但如果为每个任务…...
AI智能体安全攻防实战:从提示词注入到纵深防御
1. 项目概述:当AI助手成为攻击目标最近在安全研究圈里,一个名为“agent-attack”的项目引起了我的注意。这个由ChenWu98开源的仓库,直指当前大热的AI智能体(Agent)系统的安全软肋。简单来说,它研究的不是如…...
【项目实训(个人)】7:完成AI相关的环境配置与AI角色对话功能
阅见项目AI角色对话功能实战:流式输出与上下文记忆的全栈实现 在本阶段的开发中,我们小组大家各自先尝试基本的api调用,理解基本的前后端逻辑,其中在这里,我实现了一个简单的AI角色对话功能的demo,构建了一…...
