LaravelのユーザーテーブルのEmailのUNIQUEが掛けられなかった。
Server version: 5.5.65-MariaDB MariaDB Server
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
maxで767Byteなんだけど、…ってことは、UTF8が1文字4byteで計算されてるのかな?
767÷4=191.75なので…191文字までなら大丈夫なのかな?
ということで実験
VARCHAR(192)にしてみる
MariaDB [foodb]> alter table users change email email varchar(192) not null; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [foodb]> alter table `users` add unique `users_email_unique`(`email`); ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
ダメだって…
VARCHAR(191)にしてみる
MariaDB [foodb]> alter table users change email email varchar(191) not null; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [foodb]> alter table `users` add unique `users_email_unique`(`email`); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
計画通り(夜神ライトAA略)
理由
show create table users;
してみると、
CREATE TABLE `users` ( ...略... ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
ってなってて、utf8mb4だった。ので4byteなのね。