Currently we are using the following commands in PHP to set the character set to UTF-8 in our application.
Since this is a bit of overhead, we'd like to set this as the default setting in MySQL. Can we do this in /etc/my.cnf or in another location?
SET NAMES 'utf8'
SET CHARACTER SET utf8
I've looked for a default charset in /etc/my.cnf, but there's nothing there about charsets.
At this point, I did the following to set the MySQL charset and collation variables to UTF-8:
skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8
Is that a correct way to handle this?
If you're having trouble confirming the client's character-set support using MySQL Workbench, then keep the following note in mind:
Important All connections opened by MySQL Workbench automatically set the client character set to utf8. Manually changing the client character set, such as using SET NAMES ..., may cause MySQL Workbench to not correctly display the characters. For additional information about client character sets, see Connection Character Sets and Collations.
Thus I was unable to override MySQL Workbench's character sets with my.cnf changes. e.g. 'set names utf8mb4'
On MySQL 5.5 I have in my.cnf
Result is
Under Xubuntu 12.04 I simply added
to /etc/mysql/my.cnf
And the result is
Also take a look at http://dev.mysql.com/doc/refman/5.6/en/charset-server.html
MySQL versions and Linux distributions may matter when making configurations.
However, the changes under
[mysqld]
section is encouraged.I want to give a short explanation of tomazzlender's answer:
[mysqld]
This will change collation_connection to utf8_unicode_ci
Using
SET NAMES
:The SET NAMES will influence three characters, that is:
This will set
character_set_database & character_set_server
This will only affect collation_database & collation_server
Sorry, I'm not so sure what is this for. I don't use it however:
All settings listed here are correct, but here are the most optimal and sufficient solution:
Add these to
/etc/mysql/my.cnf
.Please note, I choose utf8_unicode_ci type of collation due to the performance issue.
The result is:
And this is when you connect as non-SUPER user!
For example, the difference between connection as SUPER and non-SUPER user (of course in case of utf8_unicode_ci collation):
user with SUPER priv.:
user with non-SUPER priv.:
I wrote a comprehensive article (rus) explaining in details why you should use one or the other option. All types of Character Sets and Collations are considered: for server, for database, for connection, for table and even for column.
I hope this and the article will help to clarify unclear moments.
To set the default to UTF-8, you want to add the following to my.cnf
If you want to change the character set for an existing DB, let me know... your question didn't specify it directly so I am not sure if that's what you want to do.