原则:迁移:迁移:SQLSTATE[42000]:语法错误或访问冲突:1064



我正在尝试使用命令迁移生产环境(MySQL 5.6(中的数据库:php bin/console doctrine:migrations:migrate

我把它放在Doctrine.yalm中:

doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.6'

我不知道为什么我有错误消息:

迁移20200426103129执行期间失败。错误 异常 在执行"创建表"用户(ID INT AUTO_INCREMENT NOT 时发生 空, 电子邮件 VARCHAR(180( 不空, 角色 JSON 不为空, 密码 瓦尔查尔(255( 不为空,唯一索引UNIQ_8D93D649E7927C74(电子邮件(, 主键(ID(( 默认字符集 UTF8MB4 排序规则 utf8mb4_unicode_ci引擎 = InnoDB':

SQLSTATE[42000]:语法错误或访问冲突:1064 您有一个 您的 SQL 语法错误;检查与您的手册相对应的手册 MySQL 服务器版本,用于在"JSON NOT NULL"附近使用的正确语法, 密码 VARCHAR(255( 不为空,唯一索引 UNIQ_8D93D649E7927C7' 在 第 1 行 13:03:10 错误 [控制台] 运行命令时引发错误 "学说:迁徙:迁徙"。消息:"发生异常时 执行"创建表用户(ID INT AUTO_INCREMENT不为空,电子邮件 瓦尔查尔(180( 不为空, 角色 JSON 不为空, 密码 瓦尔查尔(255( 不 空,唯一索引UNIQ_8D93D649E7927C74(电子邮件(,主键(ID(( 默认字符集 utf8MB4 整理utf8mb4_unicode_ci引擎 = InnoDB':\SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在 'JSON 不为空,密码 VARCHAR(255( 不为空,唯一索引附近 UNIQ_8D93D649E7927C7' 在第 1 行" ["exception" =>Doctrine\DBAL\Exception\SyntaxErrorException^ { ...},"command" =>"doctrine:migrations:migrate","message" => "" 发生异常 在执行"创建表"用户(ID INT AUTO_INCREMENT不为空时, 电子邮件 VARCHAR(180( 不为空, 角色 JSON 不为空, 密码 瓦尔查尔(255( 不为空,唯一索引UNIQ_8D93D649E7927C74(电子邮件(, 主键(ID(( 默认字符集 UTF8MB4 排序规则 utf8mb4_unicode_ci 引擎 = InnoDB': SQLSTATE[42000]:语法 错误或访问冲突:1064 SQL 语法有错误; 检查与您的 MySQL 服务器版本对应的手册以了解 在'JSON NOT NULL, PASSWORD VARCHAR(255( NOT 附近使用的正确语法 空,唯一索引 UNIQ_8D93D649E7927C7' 在第 1 行 ""]

在AbstractMySQLDriver中.php第79行: 执行"创建表"用户(ID INT AUTO_INCREMENT 不为空,电子邮件 VARCHAR(180( 不为空,角色 JSON 不为空,
密码 VARCHAR(255( 不为空,唯一索引 UNIQ_8D93D649E7927C74(电子邮件(,主键(ID((默认字符集 utf8mb4 COLLA TE utf8mb4_unicode_ci ENGINE = InnoDB':

                                                                   SQLSTATE[42000]: Syntax error or access violation: 1064 You have an

SQL 语法错误;请查看与您的
r MySQL 服务器版本对应的手册,了解在"JSON NOT "附近使用的正确语法 空,密码 VARCHAR(255( 不为空,唯一索引
UNIQ_8D93D649E792 7C7' 在第 1 行

在 PDOConnection 中.php第 90 行:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;请查看与您的
r MySQL 服务器版本对应的手册,了解在第 1 行的"JSON 不为空,密码 VARCHAR(255( 不为空,唯一索引
UNIQ_8D93D649E792 7C7"附近使用的正确语法

在 PDOConnection 中.php第 88 行:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;请查看与您的
r MySQL 服务器版本对应的手册,了解在第 1 行的"JSON 不为空,密码 VARCHAR(255( 不为空,唯一索引
UNIQ_8D93D649E792 7C7"附近使用的正确语法

JSON 列类型在 MySQL 5.7.8 之前不可用,因此您无法将此类列添加到数据库中

我自己解决。 与这个问题相关的内容很多,但总是给出部分答案。

对于有此问题的其他人,这里是完整的解释:

使用Symfony创建用户实体时,您将有一个JSON列来管理角色。 如果您的SQL版本低于5.7.8,则必须在doctrine.yaml文件中指示版本,如下所示:

doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.6'

这还不是全部:如果您在尝试迁移数据库时遇到错误消息 SQLSTATE[42000],您还必须删除在 src/migration 文件夹中生成的文件。

最新更新