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.18 «Операторы 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.