10.5 Настройка кодировки символов и правил сортировки приложения
Для приложений, которые хранят данные, используя стандартную кодировку символов и правила сортировки MySQL (latin1, latin1_swedish_ci), специальной настройки обычно не требуется. Если приложениям требуется хранение данных с использованием другой кодировки символов или правил сортировки, вы можете настроить информацию о кодировке несколькими способами:
Укажите параметры кодировки для каждой базы данных. Например, приложения, использующие одну базу данных, могут использовать значение по умолчанию
latin1, в то время как приложения, использующие другую базу данных, могут использоватьsjis.Укажите параметры кодировки при запуске сервера. Это заставляет сервер использовать указанные параметры для всех приложений, которые не производят других настроек.
Укажите параметры кодировки во время настройки, если вы собираете MySQL из исходного кода. Это заставляет сервер использовать указанные параметры в качестве значений по умолчанию для всех приложений, без необходимости указывать их при запуске сервера.
Когда разные приложения требуют разные параметры кодировки, метод на уровне базы данных предоставляет значительную гибкость. Если большинство или все приложения используют одну и ту же кодировку, указание параметров кодировки при запуске сервера или во время настройки может быть наиболее удобным.
Для методов на уровне базы данных или при запуске сервера настройки управляют кодировкой символов для хранения данных. Приложения также должны указать серверу, какую кодировку символов использовать для связи клиент/сервер, как описано в следующих инструкциях.
В приведенных здесь примерах предполагается использование кодировки символов utf8 и правил сортировки utf8_general_ci в конкретных контекстах как альтернатива значениям по умолчанию latin1 и latin1_swedish_ci.
-
Укажите параметры кодировки для каждой базы данных. Чтобы создать базу данных, таблицы которой будут использовать заданную кодировку символов и правила сортировки по умолчанию для хранения данных, используйте оператор
CREATE DATABASE, например:CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci;
Созданные в базе данных таблицы по умолчанию используют
utf8иutf8_general_ciдля любых столбцов с данными символьного типа.Приложения, использующие базу данных, также должны настраивать свое подключение к серверу каждый раз при подключении. Это можно сделать, выполнив оператор
SET NAMES 'utf8'после подключения. Данный оператор может быть использован независимо от метода подключения (клиент mysql, скрипты PHP и так далее).В некоторых случаях может быть возможным настроить подключение для использования желаемой кодировки символов иным способом. Например, для подключения с помощью mysql можно указать опцию командной строки
--default-character-set=utf8для достижения того же результата, что иSET NAMES 'utf8'.Дополнительную информацию о настройке подключений клиентов см. в разделе 10.4 «Кодировки символов и правила сортировки подключений».
ПримечаниеЕсли вы используете
ALTER DATABASEдля изменения кодировки символов или правил сортировки по умолчанию базы данных, существующие сохранённые процедуры в базе данных, использующие эти значения по умолчанию, необходимо удалить и пересоздать, чтобы они использовали новые значения по умолчанию. (В сохранённой процедуре переменные с типами данных символов используют значения по умолчанию базы данных, если кодировка символов или правила сортировки не указаны явно. См. раздел 13.1.16 «Операторы CREATE PROCEDURE и CREATE FUNCTION».) -
Укажите параметры кодировки при запуске сервера. Чтобы выбрать кодировку символов и правила сортировки при запуске сервера, используйте опции
--character-set-serverи--collation-server. Например, чтобы указать опции в файле конфигурации, добавьте эти строки:[mysqld] character-set-server=utf8 collation-server=utf8_general_ci
Эти настройки применяются ко всему серверу и используются в качестве значений по умолчанию для баз данных, созданных любым приложением, и для таблиц, созданных в этих базах данных.
Приложения всё равно должны настраивать своё подключение с помощью
SET NAMESили эквивалентного оператора после подключения, как описано ранее. Вы можете попытаться запустить сервер с опцией--init_connect="SET NAMES 'utf8'", чтобы операторSET NAMESвыполнялся автоматически для каждого подключающегося клиента. Однако это может привести к несогласованным результатам, поскольку значениеinit_connectне выполняется для пользователей, у которых есть привилегияSUPER. -
Укажите параметры кодировки во время настройки MySQL. Чтобы выбрать кодировку символов и правила сортировки, если вы настраиваете и собираете MySQL из исходного кода, используйте опции
DEFAULT_CHARSETиDEFAULT_COLLATIONCMake:cmake . -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci
Полученный сервер использует
utf8иutf8_general_ciв качестве значений по умолчанию для баз данных и таблиц, а также для подключений клиентов. Не нужно использовать--character-set-serverи--collation-serverдля указания этих значений по умолчанию при запуске сервера. Также не нужно использоватьSET NAMESили эквивалентный оператор для настройки подключения приложения после подключения к серверу.
Независимо от того, как вы настраиваете кодировку символов MySQL для использования приложениями, вы также должны учитывать среду, в которой эти приложения выполняются. Например, если вы отправляете операторы, используя текстовый файл UTF-8, который создали в редакторе, следует открыть этот файл с локали среды, установленной на UTF-8, чтобы кодировка файла была корректной и чтобы операционная система обрабатывала её правильно. Если вы используете клиент mysql из окна терминала, это окно должно быть настроено на использование UTF-8, иначе символы могут отображаться некорректно. Для скрипта, выполняемого в веб-среде, скрипт должен правильно обрабатывать кодировку символов для взаимодействия с сервером MySQL, а также генерировать страницы, корректно указывающие кодировку, чтобы браузеры могли правильно отображать содержимое страниц. Например, вы можете добавить этот <meta> тег в ваш <head> элемент:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
© 2025 Oracle
Licensed under the GPLv2 License.