MariaDB中带有CANCAT键的表格可在10.0版本(不包括更高版本)中使用

rqqzpn5f  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(91)

我正在尝试从MariaDB 10.0升级到10.5以使用Galera集群。我们的一个表有一个键,以后的版本将不接受。错误和表结构如下。
重构代码是最后的手段,所以如果有一个表定义的变化,可以解决这个问题,这将是***太棒了!***
谢谢你,谢谢你
错误
第40239行出现错误1901(HY 000):在tc_sequence_id的GENERATED ALWAYS AS子句中不能使用函数或表达式“concat(tc_sequence_db_codetc_sequence_prefixtc_sequence_table_name)”
该表结构

CREATE TABLE `tc_sequence` (
  `tc_sequence_id` char(191) AS (concat(`tc_sequence_db_code`,`tc_sequence_prefix`,`tc_sequence_table_name`)),
  `tc_sequence_table_name` char(191) NOT NULL,
  `tc_sequence_db_code` char(2) NOT NULL DEFAULT '',
  `tc_sequence_prefix` char(5) NOT NULL DEFAULT '',
  `tc_sequence_next_id` int(11) NOT NULL DEFAULT 0,
  `dt_temp_id` varchar(36) DEFAULT NULL,
  `tc_sequence_trf_yn` tinyint(1) NOT NULL DEFAULT 0,
  UNIQUE KEY `tc_sequence_id` (`tc_sequence_id`),
  KEY `tc_sequence_table_name` (`tc_sequence_table_name`),
  KEY `dt_temp_id` (`dt_temp_id`),
  KEY `tc_sequence_trf_yn` (`tc_sequence_trf_yn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
xlpyo6sf

xlpyo6sf1#

感谢Paul T为我们提供了解决方案的线索。围绕CONCAT的RTRIM不起作用,但它可以:

CREATE TABLE `tc_sequence` (
  `tc_sequence_id` char(191) AS (concat(RTRIM(`tc_sequence_db_code`),RTRIM(`tc_sequence_prefix`),RTRIM(`tc_sequence_table_name`))),
  `tc_sequence_table_name` char(191) NOT NULL,
  `tc_sequence_db_code` char(2) NOT NULL DEFAULT '',
  `tc_sequence_prefix` char(5) NOT NULL DEFAULT '',
  `tc_sequence_next_id` int(11) NOT NULL DEFAULT 0,
  `dt_temp_id` varchar(36) DEFAULT NULL,
  `tc_sequence_trf_yn` tinyint(1) NOT NULL DEFAULT 0,
  UNIQUE KEY `tc_sequence_id` (`tc_sequence_id`),
  KEY `tc_sequence_table_name` (`tc_sequence_table_name`),
  KEY `dt_temp_id` (`dt_temp_id`),
  KEY `tc_sequence_trf_yn` (`tc_sequence_trf_yn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

非常感谢保罗T!

相关问题