簡體   English   中英

MySQL / MariaDB 不接受 JSON 格式? 無法創建數據庫

[英]MySQL / MariaDB not accepting JSON Format? Can not create Database

我目前在 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”(實體類)或我進行路由的控制器文件中的更多代碼,請告訴我。

我很感激任何幫助!

根據您的評論,Doctrine 似乎認為它可以使用您的 mariadb 版本不可用的功能。

如果您告訴LONGTEXT您使用的是哪個版本,它會為該列選擇正確的數據類型,在這種情況下可能是LONGTEXT或類似的東西。

根據您使用的內容,它看起來像(例如在 symfony 中使用 yaml 文件):

doctrine:
    dbal:
        server_version: '10.1'

請注意,您需要重新生成遷移。

就像我在評論中提到的那樣,我個人會標准化數據庫並使用不同的表將比薩餅與成分聯系起來,以便更輕松地搜索和過濾。

首先檢查您的 mariadb 版本。 10.1 版不支持 JSON 數據類型,並且對 10.2 版的支持不完整。

一種解決方法是將dotric.yaml文件中的版本改為

server_version: '5.6'

然后重新生成 getter 和 setter

php bin/console make:entity --regenerate

然后生成遷移文件

php bin/console make:migration

這將生成一個數據類型設置為LONGTEXT的遷移文件。

之后,在src/Migrations 中打開每個文件並檢查任何數據類型為JSON 的遷移文件,並刪除所有具有此類數據類型的遷移。 請記住,如果您不刪除這些文件,則下一個命令將迭代每個文件,從舊文件開始將它們一個一個地保存到數據庫中。 如果存在這樣的文件,它將再次觸發錯誤。

最后,運行

php bin/console doctrine:migrations:migrate

這將相應地將所有遷移持久化到數據庫。

有同樣的問題,我找到了這個解決方法:

Doctrine.yaml發現 server_version 高於我的 MariaDB 版本,所以我在這一行中更正了這一點:

   doctrine:
        dbal:
            server_version: '5.5'

我沒有工作,直到我手動刪除了我已經做過的遷移。 您可以在src/Migrations找到它們。

然后再次運行:

 php bin/console make:migration
 php bin/console doctrine:migrations:migrate

這完成了工作,希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM