MySQL 5.7中CHAR类型非空默认值设置报错问题咨询
MySQL 5.7中设置password字段默认值报错的原因及解决办法
核心原因
password是MySQL 5.7的保留关键字,当你直接用它作为字段名并设置默认值时,MySQL会错误地将其解析为内置的PASSWORD()加密函数,而非普通字段名,导致默认值32的配置被判定为非法,触发1067 - Invalid default value for 'password'错误。
另外,如果你的password字段是字符串类型(比如VARCHAR),直接写DEFAULT 32(不加单引号),在MySQL 5.7默认开启的严格SQL模式下,这种隐式类型转换会被拦截,进一步放大错误,但关键字冲突才是根本问题。
解决办法
- 给字段名添加反引号,强制MySQL将其识别为普通字段:
CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, `password` VARCHAR(255) DEFAULT '32' -- 字符串类型默认值需加单引号,数字类型可省略 ); - 更换字段名,避开保留关键字,比如改用
user_password,无需额外处理即可正常设置默认值:CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, user_password VARCHAR(255) DEFAULT '32' ); - (不推荐)临时关闭严格SQL模式:执行
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';,但这会降低数据校验的严谨性,容易引发其他数据问题,不建议长期使用。
内容的提问来源于stack exchange,提问作者Nano HE
相关产品推荐
相关产品推荐

