You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CData迁移SQL Server表至MariaDB时遇主键报错求助

解决CData迁移SQL Server表到MariaDB时的主键错误(1170)

错误原因

MariaDB规定,当TEXT/BLOB类型列(或被误识别为这类的列)作为主键时,必须指定索引长度。你的情况是CData在转换SQL Server的nvarchar(255)主键列时,没有正确传递长度信息,导致MariaDB将其识别为TEXT类型,触发1170错误。

解决办法

1. 手动预创建目标表

先在MariaDB中创建与源表结构完全匹配的表,明确指定列类型和主键:

CREATE TABLE table1 (
    username VARCHAR(255) NOT NULL PRIMARY KEY,
    account_name VARCHAR(255),
    description VARCHAR(255),
    change_date DATE
);

然后执行CData的REPLICATE命令,指定写入已存在的表:

REPLICATE [dbo].[table1] INTO table1;

这种方式跳过CData自动建表的步骤,从根源避免类型映射错误。

2. 调整CData的类型映射配置

修改CData连接MariaDB的配置,强制将SQL Server的nvarchar类型映射为MariaDB的带长度VARCHAR:

  • 找到CData的配置文件(如mariadb.cfg),添加或修改参数:
    DataTypeMapping=nvarchar=VARCHAR
    
  • 或者在连接字符串中直接指定:
    jdbc:sqlserver://...;DataTypeMapping=nvarchar=VARCHAR;
    

这样CData会正确保留nvarchar的长度信息,建表时生成VARCHAR(255)而非TEXT类型。

3. 自定义REPLICATE命令的字段映射

如果CData支持,在REPLICATE命令中显式指定每个字段的类型,覆盖默认映射:

REPLICATE [dbo].[table1] (
    username VARCHAR(255) PRIMARY KEY,
    account_name VARCHAR(255),
    description VARCHAR(255),
    change_date DATE
) INTO table1;

内容的提问来源于stack exchange,提问作者stackoverflowme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:35:23