Symfony 4 在通过 make:user 架构更新生成用户后崩溃
Symfony 4 after generating user via make:user schema update crashed
我正在尝试通过 CLI 创建用户:(symfony doc)
php bin/console make:user
此命令创建 User.php 实现用户界面的实体。
但是在命令之后:
php bin/console doctrine:schema:update --force
我收到错误:
在 AbstractMySQLDriver.php 第 79 行:
An exception occurred while executing 'CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(18
0) NOT NULL, roles JSON NOT NULL, password VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C74 (emai
l), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB':
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma
nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass
word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1
在 PDOConnection.php 第 90 行:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma
nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass
word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1
在 PDOConnection.php 第 88 行:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma
nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass
word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1
编辑:
关于sql的信息:
服务器类型:MariaDB
服务器版本:10.1.31-MariaDB - mariadb.org二进制分发
协议版本:10
JSON Type 是您的 MariaDB 数据库版本的未知类型(参见 type documentation)。 Doctrine 创建了一个错误的迁移脚本,因为它不知道您使用的是哪个版本。
将 config/packages/doctrine.yml
中的 server_version
配置为:
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: 'XXXX'
...
将 X 替换为您的版本,前缀为 mariadb-
作为 mentioned in documentation。所以 DoctrineBundle 会知道不支持 JSON 并将替换为另一种类型。
您的 MariaDB 必须更新。您有一个类型为 JSON 的字段(例如角色),但它是 only available from 10.2+,您的版本是 10.1.
此外,您使用的方法 (update+ --force
) 不是很适合 Symfony 4。更好的方法是:
php bin/console make:user
php bin/console make:migration
php bin/console doctrine:migrations:migrate
我正在尝试通过 CLI 创建用户:(symfony doc)
php bin/console make:user
此命令创建 User.php 实现用户界面的实体。
但是在命令之后:
php bin/console doctrine:schema:update --force
我收到错误:
在 AbstractMySQLDriver.php 第 79 行:
An exception occurred while executing 'CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(18 0) NOT NULL, roles JSON NOT NULL, password VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C74 (emai l), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB':
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1
在 PDOConnection.php 第 90 行:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1
在 PDOConnection.php 第 88 行:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1
编辑:
关于sql的信息:
服务器类型:MariaDB
服务器版本:10.1.31-MariaDB - mariadb.org二进制分发
协议版本:10
JSON Type 是您的 MariaDB 数据库版本的未知类型(参见 type documentation)。 Doctrine 创建了一个错误的迁移脚本,因为它不知道您使用的是哪个版本。
将 config/packages/doctrine.yml
中的 server_version
配置为:
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: 'XXXX'
...
将 X 替换为您的版本,前缀为 mariadb-
作为 mentioned in documentation。所以 DoctrineBundle 会知道不支持 JSON 并将替换为另一种类型。
您的 MariaDB 必须更新。您有一个类型为 JSON 的字段(例如角色),但它是 only available from 10.2+,您的版本是 10.1.
此外,您使用的方法 (update+ --force
) 不是很适合 Symfony 4。更好的方法是:
php bin/console make:user
php bin/console make:migration
php bin/console doctrine:migrations:migrate