为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:
- 【系统版本 & kernel 版本】
- 【TiDB 版本】v3.0.4
- 【磁盘型号】
- 【集群节点分布】
- 【数据量 & region 数量 & 副本数】
- 【问题描述(我做了什么)】使用SAP Data Servies写入tidb, job报错.tidb日志信息如图
- 【关键词】syntax error
为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:
这是语法错误,建议排查一下客户端写入的SQL语句是否符合TiDB语法规范
感谢您的及时回复.
是这样的, 同样的DS job, 数据写入到MySQL5.6, MySQL8.0 同样的表.是没问题的.
SQL语句很简单, 就是 INSERT INTO “test”.“MATCHTABLE_S” (“ID”, “MATCHID”) VALUES (NULL, ‘xx-xxxxxxx-xxx-xxx-xxxx-xxxxxxxx-xxxxxxxx’);
另外, 在通过sqlyog客户端连接tidb, 执行该语句的时候报了一个这样的错误,
但是数据扔可以写入
tidb.log上:
INSERT INTO “test”.“MATCHTABLE_S”(“ID”,“MATCHID”) values 修改为INSERT INTO test
.MATCHTABLE_S
(ID,MATCHID)这样可以吗,字段名称不应该用双引号
一样会报.
关于引号是这样的, 这个是SAP DS这套ETL工具连库的时候会用ANSI的sql_mode, 其中会设置 ANSI_QUOTES
之前用MySQL都是没问题的.
目前TiDB 不支持EXPLAIN INSERT语法
哦. 是的. 我把SQLyog里的explain result这个功能选项去掉之后就没有报这个错误了.谢谢.
还是回到DS 数据写入tidb, 报syntax error的这个问题上. 您之前说是排查客户端写入的SQL语句. log中错误信息的头一句是: [ERROR] [misc.go:114] [“syntax error”] [error="line 1 column 18 near "“test”.“MATCHTABLE_S” (“ID”, “MATCHID”) VALUES (?, ?) " "] 难道是 VALUES (?, ?) 这个出的问题?
可能是的,你能用生成的具体的语句在TiDB中执行一下看看
入库的语句就是, INSERT INTO “test”.“MATCHTABLE_S” (“ID”, “MATCHID”) VALUES (NULL, ‘xx-xxxxxxx-xxx-xxx-xxxx-xxxxxxxx-xxxxxxxx’). 这个语句是在跑MySQL表时在prosslist中看到的.
同样的job, 换成MySQL的表就不会错. 是tidb在解析 ? 占位符的时候出问题了?
建议检查一下sql_mode值,看是否设置了ANSI_QUOTES
tidb是支持sql_mode=ANSI的, 不是吗?
Data Services 在ETL的时候往表里写数据会使用VALUES (?, ?)这样用问号占位符的.
同样的处理, 使用MySQL是正常的.
嗯,tidb支持ANSI_QUOTES的sql_mode,但是默认的sql_mode值为:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。