Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result
является undefined
в вашем примере кода.
Чтобы установить значение по умолчанию для UTF-8, вы хотите добавить следующее в my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
Если вы хотите изменить набор символов для существующей БД, сообщите мне. ваш вопрос не указал его напрямую, поэтому я не уверен, что это то, что вы хотите сделать.
Для последней версии MySQL
default-character-set = utf8
вызывает проблему.
Как говорится в , Джастин Бал говорит в « Обновление до MySQL 5.5.12, и теперь MySQL не запустится , вы должны:
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
mysql> show variables like 'char%';
Результат должен выглядеть так: +--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/|
+--------------------------+---------------------------------+
Второй запрос: mysql> show variables like 'collation%';
И вывод запроса: +----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
У этого вопроса уже много ответов, но Матиас Биненс упомянул, что вместо utf8 следует использовать «utf8mb4», чтобы иметь лучшую поддержку UTF-8 («utf8» не поддерживает 4 байтовых символа, поля усечен на вставке ). Я считаю это важным отличием. Итак, вот еще один ответ о том, как установить набор символов и сортировку по умолчанию. Это позволит вам вставить кучу poo (
NijaCat был близок, но указанный overkill:
Чтобы установить значение по умолчанию для UTF-8, вы хотите добавить следующее в my.cnf
[client]
default-character-set=utf8
[mysqld]
default-character-set = utf8
Затем, чтобы проверьте:
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
В Xubuntu 12.04 я просто добавил
[mysqld]
character_set_server = utf8
в /etc/mysql/my.cnf
И результат
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
Также взгляните на http://dev.mysql.com/doc/refman/5.6/en/charset-server.html
Все приведенные здесь настройки верны, но вот наиболее оптимальное и достаточное решение:
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
[client]
default-character-set = utf8
Добавьте их в /etc/mysql/my.cnf
.
Обратите внимание: я выбираю utf8_unicode_ci тип сопоставления из-за проблемы с производительностью.
Результат:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
И это когда вы подключаетесь как пользователь, не являющийся SUPER!
Для Например, разница между подключением как SUPER и не SUPER пользователем (конечно, в случае установки utf8_unicode_ci):
пользователь с SUPER priv .:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
пользователь с не- SUPER priv.:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
Я написал всеобъемлющую статью (rus), в которой подробно объясняется, почему вы должны использовать тот или иной вариант. Все типы наборов символов и их сортировки рассматриваются: для сервера, для базы данных, для соединения, для таблицы и даже для столбца.
Надеюсь, что это и статья помогут прояснить неясные моменты.
MySQL 5.5, все, что вам нужно:
[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci
collation_server
является необязательным.
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
MySQL v5.5.3 и выше:
Просто добавьте три строки только в раздел [mysqld]:
[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake
Примечание. Включение skip-character-set-client-handshake
здесь устраняет необходимость включают в себя init-connect
в [mysqld]
и default-character-set
в разделах [client]
и [mysql]
.
Директива изменилась на character-set-system=utf8
http://dev.mysql.com/doc/refman/5.6/en/charset-configuration.html
Если вы сбиты с толку вашей настройкой для клиента, а соединение сбрасывается после перезапуска службы mysql. Попробуйте выполнить следующие шаги (которые работали для меня):
vi /etc/my.cnf
:wq
[client]
character-sets-dir=/usr/local/mysql/share/mysql/charsets
status;
, вы увидите, что набор символов для «client» и «conn» установлен на «utf8». Если у вас возникли проблемы с подтверждением поддержки набора символов клиента с помощью MySQL Workbench, обратите внимание на следующее примечание:
Важно. Все подключения, открытые MySQL Workbench, автоматически устанавливают набор символов клиента utf8 , Вручное изменение набора символов клиента, например, с помощью SET NAMES ..., может привести к тому, что Workbench MySQL не будет правильно отображать символы. Дополнительные сведения о наборах клиентских символов см. В разделе «Наборы символов соединения и сортировки».
Таким образом, я не смог переопределить наборы символов MySQL Workbench с изменениями my.cnf. например 'set names utf8mb4'
Изменить символ MySQL:
default-character-set=utf8
character_set_server=utf8
Мы не должны писать default-character-set=utf8
в mysqld, потому что это может привести к в ошибке:
start: Не удалось запустить задание
blockquote>Наконец:
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
В Fedora 21
$ vi /etc/my.cnf
Добавить следующее:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
Сохранить и выйти.
Заключительное помните перезапуск службы mysqld с service mysqld restart
.
В MySQL 5.5 у меня есть в my.cnf
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
Результат
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
Примечание: файл my.cnf находится в /etc/mysql/
. После добавления этих строк:
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
Не забудьте перезапустить сервер:
sudo service mysql restart
Вы можете сделать это так, как он есть, и если он не работает, вам нужно перезапустить mysql.