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

SQL Server nvarchar(255)转MariaDB varchar遇CData Sync报错求解

解决CData Sync迁移SQL Server到MariaDB的1170错误

结论先行

把SQL Server的nvarchar(255)直接映射为MariaDB的varchar(255)即可解决问题,不要用varchar(512)。

问题根源

SQL Server的nvarchar是双字节存储,255个字符占510字节,但CData Sync默认会把这个字节数直接转成varchar的长度(即varchar(510))。而MariaDB中,当varchar的实际字节长度超过存储引擎的索引限制(比如InnoDB默认767字节),会被自动识别为TEXT/BLOB类型;这类类型作为主键必须指定长度,所以触发#1170 error (42000)。

具体操作步骤

  • 打开CData Sync的表映射界面,定位到报错的列(包括主键列)。
  • 将目标列的数据类型从自动生成的varchar(510)手动修改为varchar(255)。
  • 保存映射配置后重新执行迁移任务。

额外注意(针对utf8mb4字符集)

如果你的MariaDB使用utf8mb4字符集(支持emoji等全Unicode字符),varchar(255)的字节长度是255×4=1020,超过InnoDB默认的767字节索引限制,这时候可以二选一:

  1. 开启InnoDB大前缀支持:执行SET GLOBAL innodb_large_prefix = ON;,然后重启MariaDB(或者修改my.cnf配置文件永久生效),此时索引长度限制提升到3072字节,varchar(255)可正常作为主键。
  2. 把列长度调整为varchar(191),191×4=764,刚好卡在默认索引限制内。

内容的提问来源于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 20:05:45