レンタルサーバーもPHPが7.3が当たり前になってきてくれたのでXAMPPを新しくしたらDBに不具合が出たのでちょっと調べた記録。
XAMPP
10.4.8-MariaDB
あれこれ文句を言われているXAMPPですが、Windows環境で使ってる分には大変気楽に設定(もほぼ必要無いけど)出来て良い物です。
ですが今回少し古いMySQLからのmysqldumpでのバックアップがXAMPP環境で戻せなかった(エラーが出た)ので解決しました。
エラーの内容は・・・
ERROR 1118 (42000) at line 657: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
って奴です。
要するにTEXT型やBLOB型のカラムが多いとテーブル管理サイズを超えてしまうのでエラーになってるって言う事です。
これ自体は実際は調べるとまず最初にinnodb_strict_modeをOFFにする事が出てくるのに気がつきます。
XAMPPですので
xampp/mysql/bin/my.ini
に対して
innodb_strict_mode=OFF
を加える物なのです。
XAMPPコントロールパネルからは何事も無くMySQLは起動します。
しかし実際にMySQLにログインして見てみても・・・
MariaDB [(none)]> SHOW VARIABLES LIKE 'innodb_strict_mode';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| innodb_strict_mode | ON |
+--------------------+-------+
1 row in set (0.001 sec)
そう、この「MariaDB」がガン?であり実際調べても情報が見つかりにくかったです。
結果だけ書きます
先ほどのMy.ini
に対しての付け加え方が
[mariadb]
innodb_strict_mode=OFF
と[mariadb]ブロックを作成してそこに記載するする必要があったんですね。
他の設定をしていたら既に[mariadb]ブロックが有るかもしれませんのでそこに続けて書けば良いと思います。
その後再起動させ、MySQL(MariaDB)にログイン後コマンドを叩くと・・・
MariaDB [(none)]> show variables like 'innodb_strict_mode';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| innodb_strict_mode | OFF |
+--------------------+-------+
1 row in set (0.001 sec)
良かった。ちゃんと変更されました。
その後mysqldumpでのバックアップもエラーも出ずにちゃんとインポートできました。
実際XAMPPがいつからかMySQLではなく互換のMariaDBになっていたのは知ってましたが設定まで変わるところがあるとは思ってませんでした。
特に初心の方とかは悩んでしまうかもしれませんので今回記録に残しておきます。