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

MariaDB插入语句使用双引号触发语法错误的问题求助

解决MariaDB插入语句的双引号语法错误问题

这问题我之前也碰到过,核心原因是你用了双引号包裹列名,但MariaDB的默认规则里,双引号是用来表示字符串字面量的,不是列名这类标识符的分隔符。数据库会把"ADMIN_CODE"当成一个普通字符串,而非你要插入的列,自然就报语法错误了。

给你几个可行的解决办法:

1. 改用反引号包裹列名(最稳妥的默认方案)

MariaDB默认支持用反引号(`)来标识列名、表名这类标识符,把你的语句改成下面这样就能正常执行:

INSERT INTO admin (`ADMIN_CODE`, `DEPT_CODE`, `ID`) VALUES ('xxx', 'yyy', 1);

另外提一句,SQL标准里字符串推荐用单引号('),比双引号更通用,也能避免和标识符规则冲突。

2. 正确开启ANSI_QUOTES模式(如果坚持用双引号)

你说开启ANSI_QUOTES没解决问题,大概率是开启方式不对。ANSI_QUOTES模式会让MariaDB把双引号当作标识符分隔符,这时候字符串必须用单引号。你可以按以下方式设置:

  • 临时生效(当前会话):执行这条SQL开启模式,关闭连接后失效
SET SESSION sql_mode = 'ANSI_QUOTES';
  • 永久生效(全局):修改MariaDB的配置文件(my.cnf或my.ini),在[mysqld]段落添加:
sql_mode = ANSI_QUOTES

保存后重启MariaDB服务就行。

  • Spark连接时同步设置:如果是通过Spark执行,需要在JDBC连接URL里加上参数,确保会话开启ANSI_QUOTES:
jdbc:mariadb://your-host:port/your-db?sessionVariables=sql_mode=ANSI_QUOTES

至于Spark也报错的原因,是因为Spark通过JDBC把SQL直接传给MariaDB执行,所以本质还是数据库端的语法规则问题,解决了数据库这边的设置,Spark的问题也会跟着消失。

内容的提问来源于stack exchange,提问作者nee nee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 20:12:46