12.5 Настройка кодировки символов и сортировки приложения
Для приложений, которые хранят данные, используя стандартную кодировку символов и сортировку MySQL (utf8mb4, utf8mb4_0900_ai_ci), специальная настройка не требуется. Если приложениям требуется хранение данных с использованием другой кодировки символов или сортировки, вы можете настроить информацию о кодировке несколькими способами:
Укажите настройки кодировки для каждой базы данных. Например, приложения, использующие одну базу данных, могут использовать значение по умолчанию
utf8mb4, в то время как приложения, использующие другую базу данных, могут использоватьsjis.Укажите настройки кодировки при запуске сервера. Это заставит сервер использовать заданные настройки для всех приложений, которые не сделают других настроек.
Укажите настройки кодировки во время конфигурации, если вы собираете MySQL из исходных кодов. Это заставит сервер использовать заданные настройки в качестве значений по умолчанию для всех приложений, без необходимости указывать их при запуске сервера.
Когда разные приложения требуют разные настройки кодировки, метод по каждой базе данных предоставляет значительную гибкость. Если большинство или все приложения используют одну и ту же кодировку, указание настроек кодировки при запуске сервера или во время конфигурации может быть наиболее удобным.
Для методов по каждой базе данных или запуска сервера настройки контролируют кодировку символов для хранения данных. Приложения также должны указать серверу, какую кодировку символов использовать для связи клиент/сервер, как описано в следующих инструкциях.
В приведенных здесь примерах предполагается использование кодировки символов latin1 и сортировки latin1_swedish_ci в определенных контекстах в качестве альтернативы значениям по умолчанию utf8mb4 и utf8mb4_0900_ai_ci.
-
Укажите настройки кодировки для каждой базы данных. Чтобы создать базу данных, таблицы которой будут использовать заданную кодировку символов и сортировку по умолчанию для хранения данных, используйте оператор
CREATE DATABASE, например:CREATE DATABASE mydb CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Таблицы, созданные в базе данных, по умолчанию используют
latin1иlatin1_swedish_ciдля любых текстовых столбцов.Приложения, использующие базу данных, также должны настраивать своё подключение к серверу каждый раз при подключении. Это можно сделать, выполнив оператор
SET NAMES 'latin1'после подключения. Этот оператор может быть использован независимо от метода подключения (клиент mysql, скрипты PHP и т.д.).В некоторых случаях подключение может быть настроено для использования желаемой кодировки иным способом. Например, для подключения с помощью mysql можно указать параметр командной строки
--default-character-set=latin1для достижения того же эффекта, что иSET NAMES 'latin1'.Дополнительную информацию о настройке подключений клиентов см. в Разделе 12.4, «Кодировки символов и сортировки подключений».
ПримечаниеЕсли вы используете
ALTER DATABASEдля изменения кодировки символов или сортировки по умолчанию базы данных, существующие сохраненные процедуры в базе данных, использующие эти значения по умолчанию, должны быть удалены и пересозданы, чтобы использовать новые значения по умолчанию. (В сохранённой процедуре переменные с типом данных символов используют значения по умолчанию базы данных, если кодировка символов или сортировка не указаны явно. См. Раздел 15.1.17, «CREATE PROCEDURE и CREATE FUNCTION».) -
Укажите настройки кодировки при запуске сервера. Чтобы выбрать кодировку символов и сортировку при запуске сервера, используйте параметры
--character-set-serverи--collation-server. Например, чтобы указать параметры в файле параметров, добавьте эти строки:[mysqld] character-set-server=latin1 collation-server=latin1_swedish_ci
Эти настройки применяются на уровне сервера и используются в качестве значений по умолчанию для баз данных, создаваемых любым приложением, и для таблиц, создаваемых в этих базах данных.
Приложениям всё ещё необходимо настроить своё подключение с помощью
SET NAMESили эквивалента после подключения, как описано ранее. Можно попробовать запустить сервер с параметром--init_connect="SET NAMES 'latin1'"для автоматического выполненияSET NAMESдля каждого подключающегося клиента. Однако это может привести к несогласованным результатам, поскольку значениеinit_connectне выполняется для пользователей, у которых есть привилегияCONNECTION_ADMIN(или устаревшая привилегияSUPER). -
Укажите настройки кодировки во время конфигурации MySQL. Если вы настраиваете и собираете MySQL из исходных кодов, для выбора кодировки символов и сортировки используйте параметры
DEFAULT_CHARSETиDEFAULT_COLLATIONCMake:cmake . -DDEFAULT_CHARSET=latin1 \ -DDEFAULT_COLLATION=latin1_swedish_ci
Результирующий сервер использует
latin1иlatin1_swedish_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.