I have an mysql column that needs to support emoji, and that means converting a utf8 column into a utf8mb4. But my varchar(255) won\'t fit, so long as the column is indexed
I think it is connected with maximum data length of the row, there is such limitation, at least for string data types as I know. To avoid this try to separate table's data, e.g. split table into two tables using one-to-one relation.
About the maximum key length: I have tried to create table with indexed utf8mb4
field, it was successfully created with key length 191, but when I set it to 192, it threw an error - Specified key was too long; max key length is 767 bytes.
I ended up removing the index.
If performance is negatively impacted I may add a second indexed column that only contains the first n
characters (up to 191, but likely just 10-20 or so) of the current column.
The 191 character limit is due to the maximum key length of 767 bytes. For a 4 byte character, this means a max of 191 characters (floor(767/4) = 191
).