[英]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.