MySQL5.6がEOLに
まだまだ使っているところが多いと思われるMySQL5.6が2021年2月のEOLになります。
意外に早いなーと思いましたが、ExtendedSupportはGAから8年なので、リリースされたのは2013年なんですね。
移行するのでしたら、5.7は2023年10月までいけるので、こちらに乗り換えるか、思い切って最新の8にするかの選択肢になると思います。8なら2026年まで大丈夫ですしね。
5.7にして特に下記が使えるようになるのが大きいでしょうか。
・JSON型のサポート
・全文検索での日本語サポート
JSON型のサポート
カラムの型にJSON型を使うことができるようになります。
5.6まででJSONを格納しようと思ったら、そのまま文字列としてVACHARに格納して取り出したときにパースする使い方でした。
これでも一応使えるのですが、検索したいときとかは毎回展開する必要があるので面倒でした。
JSON型を使うときはテーブルの型をJSONにするだけです。
検索するときなどは関数を使い、keyとvalueを指定して取ってくることができます。
mysql> SELECT * FROM `json_table` WHERE JSON_CONTAINS(column_name, '"value"', "$.key");
上記はJSON_CONTAINS関数で特定のkeyに設定してあるvalueを検索する方法です。
他にもJSON_EXTRACTで件数取得したりとJSON関数は色々と使えます。ただフレームワークを使用していてJSONを扱う機能があるのならそっちを使うほうが良いパターンはあります。
全文検索での日本語サポート
これはその名の通り、日本語で全文検索ができるようになりました。
5.6でも全文検索はできたのですが、英語など言語が限られていましたが、新たに日本語パーサーを搭載することで実現しました。
全文検索を使うにはFULLTEXTインデックスを貼ってパーサーの指定を行う必要があります。
ALTER TABLE table_name ADD FULLTEXT INDEX n_gram_idx (column_name) WITH PARSER ngram;
上記ではパーサーにN-gramを指定しましたがMeCabも使えます。
実際に検索するときはMATCH AGAINST関数を使います。
SELECT * FROM table_name WHERE MATCH (column_name) AGAINST ('文字列');
検索モードを指定すると細かく条件を指定し、これによって検索結果が変わってきます。
デフォルトだとIN NATURAL LANGUAGE MODEになっており、他のモードを使ったときの挙動は次回独立した記事で検証してみます。