目标:使用 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 查询