CREATE TABLE IF NOT EXISTS members_table (
'id' int(10) NOT NULL AUTO_INCREMENT,
'customerNumber' varchar(10) DEFAULT NULL,
'firstName' varchar(64) NOT NULL,
'lastName' varchar(64) NOT NULL,
'address' varchar(64) DEFAULT NULL,
'city' varchar(32) DEFAULT NULL,
'state' varchar(2) DEFAULT NULL,
'country' varchar(2) DEFAULT NULL,
'zipCode' varchar(5) NOT NULL,
'phoneNumber' varchar(12) DEFAULT NULL,
'emailAddress' varchar(200) NOT NULL,
'dateOfBirth' varchar(10) DEFAULT NULL,
'subscribe' tinyint(1) DEFAULT NULL,
'password' varchar(34) DEFAULT NULL,
'resetKey' varchar(34) DEFAULT NULL,
'joinDate' datetime NOT NULL,
'active' tinyint(1) DEFAULT NULL,
'deleted' tinyint(1) DEFAULT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'emailAddress' ('emailAddress')
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Согласно этому вопросу:
MySQL принимает 3 байта на символ utf8. 255 символов - максимальный размер индекса, который вы можете указать для каждого столбца, потому что 256x3 = 768, что нарушает ограничение на 767 байт.
Поскольку вы указали utf8mb4
, MySQL принимает 4 байта на символ. Из документов MySQL:
Набор символов utf8mb4 использует максимум четыре байта на символ.
Поле emailAddress
имеет длину 200 символов, поэтому длина ключа будет равна 800 байтам, а ошибка явно говорит о том, что ограничение составляет 767 байт.
MySQL принимает наихудший случай для количества байтов на символ в строке. Для кодировки MySQL 'utf8' это 3 байта на символ, поскольку эта кодировка не допускает символов за пределами U + FFFF. Для кодировки MySQL 'utf8mb4' это 4 байта на символ, поскольку это то, что MySQL называет фактическим UTF-8.
Использовать utf8 вместо utf8mb4
Попробуй это
CREATE TABLE IF NOT EXISTS members_table (
'id' int(10) NOT NULL AUTO_INCREMENT,
'customerNumber' varchar(10) DEFAULT NULL,
'firstName' varchar(64) NOT NULL,
'lastName' varchar(64) NOT NULL,
'address' varchar(64) DEFAULT NULL,
'city' varchar(32) DEFAULT NULL,
'state' varchar(2) DEFAULT NULL,
'country' varchar(2) DEFAULT NULL,
'zipCode' varchar(5) NOT NULL,
'phoneNumber' varchar(12) DEFAULT NULL,
'emailAddress' varchar(200) NOT NULL,
'dateOfBirth' varchar(10) DEFAULT NULL,
'subscribe' tinyint(1) DEFAULT NULL,
'password' varchar(34) DEFAULT NULL,
'resetKey' varchar(34) DEFAULT NULL,
'joinDate' datetime NOT NULL,
'active' tinyint(1) DEFAULT NULL,
'deleted' tinyint(1) DEFAULT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'emailAddress' ('emailAddress')
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;