Skip to content

Commit 5ae2173

Browse files
committed
minor #10055 Mentioned the 767 bytes index limit and its solution (javiereguiluz)
This PR was squashed before being merged into the 2.8 branch (closes #10055). Discussion ---------- Mentioned the 767 bytes index limit and its solution This fixes #6398. Sadly this error is very common (I also faced myself several times) and the error message is cryptic, so let's document this problem and its solution. Commits ------- 092b7c0 Mentioned the 767 bytes index limit and its solution
2 parents 5cb68fc + 092b7c0 commit 5ae2173

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

doctrine.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,15 @@ can automatically generate an empty ``test_project`` database for you:
149149
support 4-byte unicode characters, and strings containing them will be
150150
truncated. This is fixed by the `newer utf8mb4 character set`_.
151151

152+
.. caution::
153+
154+
MySQL sets a `limit of 767 bytes for the index key prefix`_. When using
155+
``utf8mb4``, string columns with 255 character length surpass that limit.
156+
This means that any column of type ``string`` and ``unique=true`` must
157+
set its maximum ``length`` to ``190``. Otherwise, you'll see this error:
158+
*"[PDOException] SQLSTATE[42000]: Syntax error or access violation:
159+
1071 Specified key was too long; max key length is 767 bytes"*.
160+
152161
.. note::
153162

154163
If you want to use SQLite as your database, you need to set the path
@@ -838,3 +847,4 @@ Learn more
838847
.. _`FrameworkExtraBundle documentation`: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html
839848
.. _`newer utf8mb4 character set`: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
840849
.. _`Transactions and Concurrency`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/transactions-and-concurrency.html
850+
.. _`limit of 767 bytes for the index key prefix`: https://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html

0 commit comments

Comments
 (0)