我尝试执行以下查询:
SET DATABASE SQL SYNTAX MYS TRUE;
然后:
INSERT INTO mytable (id, age) VALUES (1, 1)
ON DUPLICATE KEY UPDATE id=2, age=33;
我得到错误:
INSERT INTO mytable (id, age) VALUES (1, 1)
ON DUPLICATE KEY
[2020-10-23 11:09:42] [42590][-5590] unexpected end of statement: required: UPDATE : line: 2
我做错了什么?
OP在注释中报告:
PUBLIC.PUBLIC> SET DATABASE SQL SYNTAX MYS TRUE [2020-10-23 11:23:14] completed in 4 ms
PUBLIC.PUBLIC> INSERT INTO tblUserMetadata (userMetadataId, portalId) VALUES (1, 1) ON DUPLICATE KEY [2020-10-23 11:23:14] [42590][-5590] unexpected end of statement: required: UPDATE : line: 2
这些行显示了一个SQL客户端正在用于运行脚本。SQL客户端预先解析该语句,并认为该语句在关键字KEY
之后完成,关键字UPDATE
是新语句的开始。因此,它尝试将不完整的SQL查询发送到数据库引擎。
MySQL语法正在运行,因为该命令已被接受并执行。
您可以通过从系统表中选择来检查属性设置:
SELECT * FROM information_schema.system_properties
设置MySQL兼容模式后,下面的语句返回true
:
SELECT property_value FROM information_schema.system_properties
WHERE property_name = 'sql.syntax_mys'