В настоящее время мы используем следующие команды в PHP, чтобы установить кодировку UTF-8 в нашем приложении.
Поскольку это немного накладные расходы, мы хотели бы установить это как настройку по умолчанию в MySQL. Можем ли мы сделать это в /etc/my.cnf или в другом месте?
SET NAMES 'utf8'
SET CHARACTER SET utf8
Я искал кодировку по умолчанию в /etc/my.cnf, но там нет ничего о кодировках.
На этом этапе я сделал следующее, чтобы установить переменные набора символов и параметров сортировки MySQL в UTF-8:
skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8
Это правильный способ справиться с этим?
mysql
character-encoding
Jorre
источник
источник
utf8mb4
реальный UTF-8 с полной поддержкой Unicode. См. Как поддерживать полный Unicode в базах данных MySQL .utf8mb4
это создавало опасный прецедент?Ответы:
Чтобы установить значение по умолчанию UTF-8, вы хотите добавить следующее в my.cnf
Если вы хотите изменить набор символов для существующей БД, дайте мне знать ... ваш вопрос не указал это напрямую, поэтому я не уверен, что именно это вы и хотите сделать.
источник
Table
CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;[mysqld]
.utf8
кодировку MySQL . Используйтеutf8mb4
вместо этого.Для последней версии MySQL,
вызывает проблему. Это устарело, я думаю.
Как сказал Джастин Болл в « Обновлении до MySQL 5.5.12, и теперь MySQL не запускается , вы должны:
Уберите эту директиву, и у вас все получится.
Тогда ваш файл конфигурации (например, /etc/my.cnf) должен выглядеть так:
Перезапустите MySQL.
Чтобы убедиться, что ваш MySQL - UTF-8, выполните следующие запросы в командной строке MySQL:
Первый запрос:
Вывод должен выглядеть так:
Второй запрос:
И результат запроса:
источник
character_set_filesystem | utf8
. Я не уверен, это нормально?mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
default-character-set
, вместо этого вы можете поменять наloose-default-character-set = utf8
- то есть на префикс «свободный». Этоmysqlbinlog
радует, если вам нужно его использовать - google для: mysqlbinlog : "Свободный набор символов по умолчанию" .init-connect='SET NAMES utf8'
действительно необходимо? Если нет, мы определенно можем обойтись без него для производительности.На этот вопрос уже есть много ответов, но Матиас Биненс упомянул, что вместо utf8 следует использовать utf8mb4, чтобы иметь лучшую поддержку UTF-8 (utf8 не поддерживает 4-байтовые символы, поля усекаются при вставке ). Я считаю это важным отличием. Итак, вот еще один ответ о том, как установить набор символов по умолчанию и сопоставление. Тот, который позволит вам вставить кучу какашек (💩).
Это работает на MySQL 5.5.35.
Обратите внимание, что некоторые настройки могут быть необязательными. Поскольку я не совсем уверен, что ничего не забыл, я сделаю этот ответ в вики сообщества.
Старые настройки
конфиг
Новые настройки
символьная_система всегда utf8 .
Это не повлияет на существующие таблицы, это просто настройка по умолчанию (используется для новых таблиц). Следующий код ALTER может использоваться для преобразования существующей таблицы (без обходного пути восстановления дампа):
Редактировать:
На сервере MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection остаются в latin1. Выдача
SET NAMES utf8
(utf8mb4 не доступны в этой версии) устанавливает те в utf8 , а также.Предупреждение : если у вас была таблица utf8 со столбцом индекса типа VARCHAR (255), в некоторых случаях ее нельзя преобразовать, поскольку превышена максимальная длина ключа (
Specified key was too long; max key length is 767 bytes.
). Если возможно, уменьшите размер столбца с 255 до 191 (потому что 191 * 4 = 764 <767 <192 * 4 = 768). После этого таблицу можно преобразовать.источник
character_set_database
все ещеutf8
иcollation_database
есть utf8_bin`. Я что-то пропустил?character-set-client-handshake = FALSE
в раздел [mysqld], чтобы он всегда использовал кодировку по умолчанию, даже если вы допустите ошибку на прикладном уровнеНа MySQL 5.5 у меня есть в my.cnf
Результат
источник
skip-character-set-client-handshake
именно и при каких обстоятельствах требуется?show variables like "%collation%";
я видел 'collation_connection' какutf8_general_ci
и collation_database и collation_server какutf8_unicode_ci
. Добавление строкиskip-character-set-client-handshake
изменило общую запись на юникод, поэтому все три были согласованы.skip-character-set-client-handshake
сделал это для меня (наряду с «набором символов» и «сервером сравнения», конечно же, в Debian 7). Сinit_connect
не имеет значения с или безskip
и кажутся излишними. +1 и спасибо.Примечание: файл my.cnf находится по адресу
/etc/mysql/
После добавления этих строк:
Не забудьте перезапустить сервер:
источник
NijaCat была близка, но указала на перебор:
Чтобы установить значение по умолчанию UTF-8, вы хотите добавить следующее в my.cnf
Затем, чтобы проверить:
источник
[mysql] default-character-set=utf8
тогда?[mysqld]
использованияcharacter-set-server
вместоdefault-character-set
Я также обнаружил, что после установки
default-character-set = utf8
под[mysqld]
заголовком MySQL 5.5.x не запускается под Ubuntu 12.04 (Precise Pangolin).источник
[mysqld]
, вы должны использоватьcharacter-set-server
вместоdefault-character-set
. (Очень запутанно, я согласен!)MySQL v5.5.3 и выше:
Просто добавьте три строки только в разделе [mysqld]:
Примечание: В том числе
skip-character-set-client-handshake
здесь отпадает необходимость включения какinit-connect
в[mysqld]
иdefault-character-set
в[client]
и[mysql]
секциях.источник
Под Xubuntu 12.04 я просто добавил
в /etc/mysql/my.cnf
И результат
Также посмотрите на http://dev.mysql.com/doc/refman/5.6/en/charset-server.html
источник
Все настройки, перечисленные здесь, являются правильными, но вот наиболее оптимальное и достаточное решение:
Добавьте это к
/etc/mysql/my.cnf
.Обратите внимание, я выбираю тип сортировки utf8_unicode_ci из-за проблем с производительностью.
Результат:
И это когда вы подключаетесь как не-СУПЕР пользователь !
Например, разница между подключением как SUPER и не-SUPER пользователя (конечно, в случае сортировки utf8_unicode_ci ):
пользователь с SUPER прив .:
пользователь с не SUPER прив .:
Я написал исчерпывающую статью, подробно объясняющую, почему вы должны использовать тот или иной вариант. Рассматриваются все типы наборов символов и сопоставлений : для сервера, для базы данных, для соединения, для таблицы и даже для столбца.
Надеюсь это и статья поможет прояснить неясные моменты.
источник
utf8_unicode_ci
из-за проблем с производительностью, тогда почему бы не использоватьutf8_bin
вместо этого?utf8_unicode_ci
. Никогда не тратил время на тестирование производительности.Директива изменилась на
character-set-system=utf8
http://dev.mysql.com/doc/refman/5.6/en/charset-configuration.html
источник
Версии MySQL и дистрибутивы Linux могут иметь значение при настройке конфигурации.
Тем не менее, изменения в
[mysqld]
разделе приветствуется.Я хочу дать краткое объяснение ответа tomazzlender:
[ТуздЫ]
Это изменит collation_connection на utf8_unicode_ci
Использование
SET NAMES
:НАЗВАНИЯ SET влияют на трех символов, то есть:
Это установит
character_set_database & character_set_server
Это повлияет только на collation_database & collation_server
Извините, я не совсем уверен, для чего это нужно. Я не использую это однако:
источник
character_set_server
не следует устанавливать вручную.character set
при установлении соединения с базой данных, однако выглядит немного раздражает.character_set_server
в[mysqld]
разделе затронутcharacter_set_database
иcharacter_set_server
. Теперь я думаю, что хорошей практикой является явное указание того,character set
что вы хотите использовать при создании базы данных, таблицы и соединения с базой данных. Честно говоря, документацияmysql
не так легко понять. Знаете ли вы, есть ли общий способ выполнить все настройкиcharacter set
иcollation
настройки в MySQL?На Fedora 21
Добавить подписку:
Сохранить и выйти.
Последнее помните, перезапустите службу mysqld с
service mysqld restart
.источник
MySQL 5.5, все что вам нужно это:
collation_server
необязательно.источник
Если у вас возникли проблемы с подтверждением поддержки набора символов клиента с помощью MySQL Workbench, имейте в виду следующее замечание:
Внимание! Все соединения, открываемые MySQL Workbench, автоматически устанавливают для клиентского набора символов utf8. Изменение вручную набора символов клиента, такое как использование SET NAMES ..., может привести к тому, что MySQL Workbench будет некорректно отображать символы. Для получения дополнительной информации о клиентских наборах символов см. Наборы символов соединения и сопоставления.
Таким образом, я не смог переопределить наборы символов MySQL Workbench с изменениями my.cnf. например, «установить имена utf8mb4»
источник
Если вас смущают ваши настройки для клиента и conn сбрасывается после перезапуска службы MySQL. Попробуйте эти шаги (которые работали для меня):
vi /etc/my.cnf
:wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
status;
, вы найдете набор символов для «client», а для «conn» установлено значение «utf8».Проверьте ссылку для получения дополнительной информации.
источник
Вы можете сделать это так, как оно работает, и если это не работает, вам нужно перезапустить mysql.
источник
Изменить персонаж MySQL:
клиент
туздЫ
Мы не должны писать
default-character-set=utf8
в mysqld, потому что это может привести к ошибке вроде:Наконец:
источник