phpMyAdmin 與 JSON 的小雷踩坑

MySQL5.7 之後開始支援 JSON 的格式,在新專案的開發的時候,遇到 phpMyAdmin 含有 json 格式會崩壞的情境

以下紀錄遇到的小雷小坑:

❖ Export 匯出資料

我的情境是本機 (Local)線上 (Production) 的資料庫環境是有差異的,開發初期

  • 本機 : 利用 Migrate 跟 Seeder 開出 Table Schema 跟生出假資料
  • 線上 : 把本機資料 Dump 出來匯入 線上資料庫做測試

Sequel Pro vs. phpMyAdmin

  • Sequel Pro:
    • 預設 Export 出的 sql 檔案中註解會跟 phpMyAdmin Export 的資料有落差,試著使用 Sequel Pro 匯出的資料倒入,在 phpMyAdmin 版本中:
      • 2.11.x: 含有 json 的部分會卡住,其餘可以正常匯入
      • 4.7.x: 整份都會錯誤
    • (Sorry) 這裡沒有進一步紀錄兩者之間的差異,有興趣了解無法匯入的原因者,可以自行實驗。初步看來是註解方式不同
  • 使用 phpMyAdmin 2.11.11.3 操作 Export ,在不同的 phpMyAdmin 操作 Import 都可以正常
    • 最後回到 phpMyAdmin 進行 Export,或者利用 CLI

❖ phpMyAdmin 顯示 json 資料問題

試著在匯入之後用 phpMyAdmin 看 json 資料的儲存,結果發生

SQL 語法:

SHOW TABLE STATUS LIKE  'stream_subscriptions';

MySQL 傳回: 說明文件
#2014 - Commands out of sync; you can't run this command now

查一下網路災情,https://github.com/phpmyadmin/phpmyadmin/issues/12364

這是 PHP Bug,原來我的 phpMyAdmin 機器的 PHP 版本停留在 5.5,要使 phpMyAdmin 可以瀏覽 json 的資料必須要使你的 phpMyAdmin 的 PHP 版本在 >5.6 以上才行喔。

❖ 解決 phpMyAdmin 在多種環境下的差異

使用 Dcoker ,網路上有別人串好的資源 :

MySQL with phpMyAdmin

或者單純的 phpMyAdmin

phpmyadmin Docker Image


最後的解法是統一用 Docker 跑 phpMyAdmin 連接 本機線上 的 phpMyAdmin 使兩邊的資料庫都可以透過相同的環境來瀏覽,解決 phpMyAdmin 機器原本短時間沒辦法升到 >5.6 瀏覽 json 的錯誤狀況