MySQL中使用release作为列名报错的原因及解决方法问询
问题解答
这个问题的核心原因是release是MySQL 5.7的保留关键字,直接将它用作列名会触发语法解析错误——MySQL会把它当成SQL命令的一部分,而不是表的字段名。
解决办法:不用改列名也能正常执行
你不需要修改列名,只需要用**反引号()**把release`包裹起来,让MySQL明确识别它是一个列名而非关键字。修改后的脚本如下:
CREATE TABLE external_db ( external_db_id INT not null, db_name VARCHAR(100) NOT NULL, `release` VARCHAR(40) NOT NULL, status ENUM ('KNOWNXREF','KNOWN','XREF','PRED','ORTH', 'PSEUDO') not null, PRIMARY KEY( external_db_id ) );
反引号是MySQL专属的标识符转义语法,专门用来区分关键字和自定义的表/列名,只要用它包裹保留关键字,就能正常作为字段使用。
关于版本问题的说明
这不是MySQL版本问题。RELEASE在MySQL 5.5、5.7、8.0等多个主流版本中都属于保留关键字(用于RELEASE SAVEPOINT这类事务控制语句)。原脚本标注为MySQL脚本,可能是在开启了ANSI_QUOTES模式的环境下编写的——开启该模式后,MySQL允许用双引号包裹标识符,但默认模式下只支持反引号转义。
额外可选方案
如果你不想修改脚本的列名,也可以临时切换SQL模式:
SET sql_mode = 'ANSI_QUOTES';
执行这条命令后,你可以用双引号包裹release作为列名,但这种方式需要每次连接数据库时都设置,不如直接在脚本中加反引号来得稳妥。
内容的提问来源于stack exchange,提问作者nicomp
相关产品推荐
相关产品推荐

