大容量データをInsertするときなど、パケットの最大容量を超えてないか注意を払う必要があります。ここでは、パケットの最大容量の確認方法を紹介します。
目次
確認
パケットの最大容量は max_allowed_packet
で確認できます。
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.01 sec)
上記例では、4MBが最大容量であることがわかります。
変更
SET文で設定値を変更してみます。
(SET文のため、MySQLを再起動すると設定が元に戻ります。)
今回は動作確認のため、極端に低い値を設定します。
mysql> SET GLOBAL max_allowed_packet=1024;
一度ログアウトします。
mysql> exit;
再ログインして設定を確認します。
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_allowed_packet | 1024 |
+--------------------+-------+
1 row in set (0.01 sec)
変更されていることがわかります。
エラーになることを確認
動作確認用のテーブルを作成します。
CREATE TABLE `sample_max_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`a` text COLLATE utf8mb4_bin,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
aカラムに1KBを超える情報をINSERTしようとすると、下記のようにErrorが発生しました。
mysql> INSERT INTO `sample_max_test` (`id`, `a`) VALUES (NULL, 'aaaa... (省略) ...aaaa');
ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes