Closed
Description
PR #5100 took on the task of changing information on setting mysql server defaults from UTF8 to utf8mb4. However doctrine does not actually obey this - at some point doctrine started explicitly setting column and table-level collation/charsets, and the value seems to be fixed (by default) to standard utf8.
Alternatives to force utf8mb4 for your entities require the following annotation:
@ORM\Table(options={"collate"="utf8mb4_unicode_ci", "charset"="utf8mb4"})
and while this seems hacky, it does the job.
There is a PR open for DoctrineBundle that should allow users to set a global option in their projects, although until this is merged, the documentation should be revised to remove this section as it may be dangerous for users relying upon it as the solution.
Activity
DHager commentedon Jul 16, 2015
To quibble a little bit: I believe #5100 is still correct... it's just that the scope of what's being configured is limited to the MySQL server itself. That'll affect SQL code that doesn't explicitly call for a given character set or collation, but won't override Doctrine when it explicitly tells the server to do something else.
I agree that it's a pain, but changing its behavior at this point could be a backwards-compatibility break, for all the people who thought omitting the table-options was guaranteed to give them
utf8
.There's some more discussion on that in doctrine/dbal#851.
Tobion commentedon Nov 13, 2017
This is fixed as the documentation includes now the following snippet which both set the default charset for tables and correctly set the connection charset.
xabbuh commentedon Nov 14, 2017
closing as fixed by #6274
rquadling commentedon Aug 14, 2018
With regard to the collation, https://dev.mysql.com/doc/refman/8.0/en/charset-collation-names.html contains some very useful info.