0

目标:使用 MariaDB,我想从 MS SQL Server 读取一些数据(通过 ODBC 连接引擎)并将其选择插入到本地表中。

问题:即使源 varchar 字段和目标 varchar 字段的大小相同,我也会不断收到“错误代码 1406 数据太长”(请参阅​​更多详细信息)

详细信息:我尝试执行的查询格式为:

INSERT INTO DEST_TABLE(NUMERO_DOCUMENTO)
SELECT SUBSTR(TRIM(NUMERO_DOCUMENTO),0,5)
FROM CONNECT_SRC_TABLE

以上是导致问题的最小字段子集。

  • 源 CONNECT 表实际上是 SQL Server 内部的一个视图。目标表已定义为与 ODBC CONNECT 表相同(相同的字段名称、相同的 NULL 约束、相同的文件类型和大小)
  • 其他几个 VARCHAR 字段没有问题
  • 问题发生NUMERO_DOCUMENTO VARCHAR(14) DEFAULT NULL在输入表的最大长度为 14 的字段上
  • 同样的问题也发生在同一张表上的其他 2 个字段上

总而言之,这似乎是源数据而不是目标表的问题。

尝试的解决方法

  • 我试图强制进行静默截断,但是,合理地,这没有任何区别:错误代码:1406。列的数据太长 - MySQL
  • 我尝试扩大目标字段但没有明显效果NUMERO_DOCUMENTO VARCHAR(100) DEFAULT NULL
  • 我试图修剪源字段(隐藏空格?)并在源处限制其大小无济于事:INSERT INTO DEST_TABLE(NUMERO_DOCUMENTO) SELECT SUBSTR(TRIM(NUMERO_DOCUMENTO),0,5) FROM CONNECT_SRC_TABLE但总是返回相同的错误

解决方法:我尝试使用 a 执行相同的操作,FOR x IN (src_query) DO INSERT .... END FOR并且此解决方案似乎有效:这意味着问题不在于数据本身,而在于引擎如何执行 INSERT SELECT 查询

4

0 回答 0