GBase 8s
其他
问答

Mysql 数据类型与 GBase 的兼容问题

发表于2024-12-19 17:18:22292次浏览14个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:GBase8sV8.8_TL_3.5.1_3X2_x86_64

JDBC驱动:gbasedbtjdbc_3.5.1_3X2_1.jar

【操作系统】:Centos8 (Docker构建的)

【CPU】:

[gbasedbt@ae8e80484b2a opt]$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              48
On-line CPU(s) list: 0-47
Thread(s) per core:  2
Core(s) per socket:  12
Socket(s):           2
NUMA node(s):        2
Vendor ID:           GenuineIntel
CPU family:          6
Model:               106
Model name:          Intel(R) Xeon(R) Silver 4310 CPU @ 2.10GHz
Stepping:            6
CPU MHz:             799.932
CPU max MHz:         3300.0000
CPU min MHz:         800.0000
BogoMIPS:            4200.00
Virtualization:      VT-x
L1d cache:           48K
L1i cache:           32K
L2 cache:            1280K
L3 cache:            18432K
NUMA node0 CPU(s):   0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46
NUMA node1 CPU(s):   1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 invpcid_single ssbd mba rsb_ctxsw ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq md_clear pconfig spec_ctrl intel_stibp flush_l1d arch_capabilities

【问题描述】*:

背景: 在Mysql中大量使用了类型 bit(1) 来表示布尔值,Java的POJO代码中也是使用 Integer 进行参数传递。

问题:使用官方的MTK工具迁移表结构时,bit选择映射为 Boolean,但是这样对于业务上前后端来说,传递的参数依旧是整形的 0或1,从而导致在保存数据时抛出异常:

 Cause: java.sql.SQLException: 不能解析例行程序 (equal)。

 

因此想咨询一下,是映射的类型选错了?已经尝试过bit映射Integer,数据迁移都会失败,请问有其他解决方案吗?

评论

登录后才可以发表评论
hugolin发表于 1年前
试试bit映射为smallint
GBase用户25340发表于 1年前
@hugolin:迁移数据会报错 -1213 ,看来mtk工具会先读取mysql的bit转字符串,然后转不回数字了
hugolin发表于 1年前
@GBase用户25340:迁移工具版本是?
源表结构及数据样例来一个。
GBase用户25340发表于 1年前
@hugolin:8s 产品文档处下载的最新的 MTK

CREATE TABLE `aiot_rule_chain` (
`id` bigint NOT NULL COMMENT '主键',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '名称',
`rule_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型-1:全局;2:产品;3:设备',
`type_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型编码',
`configuration` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '配置信息',
`first_rule_node_id` bigint DEFAULT NULL COMMENT '规则节点ID',
`root` bit(1) DEFAULT NULL COMMENT '是否根',
`debug_mode` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '调试模式',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注',
`create_at` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建者',
`update_at` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新者',
`org` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '组织',
`sub_org` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '子组织',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='aiot规则链';

INSERT INTO `qualsen_plat_thingsmodel_ljx`.`aiot_rule_chain` (`id`, `name`, `rule_type`, `type_code`, `configuration`, `first_rule_node_id`, `root`, `debug_mode`, `remark`, `create_at`, `create_by`, `update_at`, `update_by`, `org`, `sub_org`) VALUES (10001, 'my-chain', '1', NULL, NULL, 10001, b'0', NULL, NULL, NULL, NULL, '2024-01-12 10:32:15', 'gkadmin', NULL, NULL);
GBase用户25340发表于 1年前
@hugolin:你好,你那边测试OK吗?
hugolin发表于 1年前
@GBase用户25340:确认工具目前bit映射为smallint/int,数据都迁移不过来,这个问题研发加入计划修改
1、修改java传参为t/f
2、MTK只迁移表结构,数据源库导成unl格式再导入
最佳回答
GBase用户25340发表于 1年前
@hugolin:好的,谢谢,另外想问一下
1. t/f 是什么意思
2. unl 格式是需要我自行去navicat导出源库吗
hugolin发表于 1年前
@GBase用户25340:t表示true,f表示fasle
unl格式为数据+分隔符
abbccadfadfasdfadsfd|abbccadfadfasdfadsfd|
GBase用户26062发表于 1年前
@hugolin:您好,我这边迁移使用的boolen类型,默认值为f,代码修改对应值没问题,但是对表进行字段修改,或者类型修改的时候,会报错:SQL 错误 [IX000]: 在没有强制转型函数的情况下将一种不透明类型转换成另一种类型的尝试失败。这种情况您知道怎么处理吗
hugolin发表于 1年前
我这边研发给了个临时MTK,解决这个问题,怎么发给你?
GBase用户25340发表于 1年前
@hugolin:加我绿泡泡?我base64编码发给你
MTM1MzgzNjQ0Njg=
hugolin发表于 1年前
@GBase用户25340:通过网盘分享的文件:GBase8sMTK_V2.1.6_2_tmp2_WIN10_x86_64.zip
链接: https://pan.baidu.com/s/17hB05a55W2-2UDwBI0QxWw?pwd=hi9s 提取码: hi9s
直接发网盘吧,bit映射为smallint即可
GBase用户25340发表于 1年前
@hugolin:该版本ok
用户头像
路路路发表于 8个月前