php - MySQL/MariaDB 不接受 JSON 格式?无法创建数据库

标签 php mysql mariadb

我目前在 phpmyadmin 上使用 XAMPP/Apache 和 MariaDB。 我正在尝试使用 Doctrine 基于我的代码创建一个表,因此使用 Annotations 来验证表单。我只是想将表单中输入的值存储在数据库中。 在另一个示例中,这工作得很好。

但现在我有一个“复选框字段”,我猜它在创建数据库时会造成某种麻烦。

我在控制台中使用这些命令:

php bin/console make:migration

之后:

php bin/console doctrine:migrations:migrate

当调用第二个时 = 当我尝试在我的数据库中创建表时出现以下错误:

Migration 20181121103017 failed during Execution. 
Error An exception occurred while executing 'CREATE TABLE pizza (id INT 
AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, address VARCHAR(255) NOT NULL
phone VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, 
size INT NOT NULL, ingredient JSON NOT NULL COMMENT '(DC2Type:json_array)', delivery INT NOT NULL, 
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 manual that
corresponds to your MariaDB server version for the right syntax to use near 
'JSON NOT NULL COMMENT '(DC2Type:json_
array)', delivery INT NOT NULL, PRIMARY KEY' at line 1

我真的不知道我现在做错了什么。

这些是我在“Pizza.php”文件中的注释。

// ------------------

/**
 * @Assert\NotBlank(
 *     message = "E-Mail Address required"
 * )
 * @Assert\Email(
 *     message = "The email '{{ value }}' is not a valid email."
 * )
 * @Assert\Length(min="2", max="255")
 * @ORM\Column(type="string", length=255)
 */

protected $email;

// ------------------

/**
 * @Assert\Range(min=0, max=3)
 * @ORM\Column(type="integer")
 */

protected $size;

// ------------------

/**
 *@Assert\NotBlank(
 *     message = "Choose at least 1 ingredient!"
 * )
 * @ORM\Column(type="array")
 */

protected $ingredient;

// ------------------

/**
 * @Assert\NotBlank(
 *     message = "Choose a delivery option!"
 * )
 * @Assert\Range(min=0, max=1)
 * @ORM\Column(type="integer")
 */

protected $delivery;

表单本身运行良好,验证确实按照我的预期进行。

我究竟做错了什么?

如果您需要我的“Pizza.php”(实体类)或我执行路由的 Controller 文件中的更多代码,请告诉我。

我很感激任何帮助!

最佳答案

根据您的评论,Doctrine 似乎认为它可以使用您的 mariadb 版本不可用的功能。

如果您告诉 doctrine 您正在使用哪个版本,它会为该列选择正确的数据类型,在本例中可能是 LONGTEXT 或类似的东西。

根据您使用的内容,它看起来像(例如在 symfony 中使用 yaml 文件):

doctrine:
    dbal:
        server_version: '10.1'

请注意,您需要重新生成迁移。

正如我在评论中提到的,我个人会规范化数据库并使用不同的表将比萨饼与配料相关联,以便更轻松地进行搜索和过滤。

关于php - MySQL/MariaDB 不接受 JSON 格式?无法创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53410609/

相关文章:

node.js - MariaDB 的 Sequelize 错误

mysql - Rebol2 无法连接到 MariaDB

php - 在apach2本地mac上设置多个虚拟主机

php - 在Laravel中上传图像时获取空白页

c++ - 如何使用 MySQL C++ Connector 存储二进制数据?

mysql - MySQL 连接中的Where 子句?

mysql - 在sql中合并数据

javascript - 加载动态 php 生成的 javascript

php - 在 MySQL 数据库表中存储多个字符串

mysql - 将 csv 文件从 mySQL (MariaDB) 导出到目标文件夹时权限被拒绝