10.5 Configuring Application Character Set and Collation

10.5 Configuring Application Character Set and Collation Хостинг

Если информация из базы данных на сайте отображается некорректно, то может потребоваться изменить кодировку всех таблиц базы данных, рассмотрим как это сделать. MySQL может содержать сотни таблиц, поэтому рекомендуем для оперативной смены кодировки выполнить следующие действия:

Панель phpMyAdmin

2. Откройте раздел SQL. (В столбце сравнение показана кодировка сопоставления)

Таблицы баз данных

3. Скопируйте запрос, представленный ниже, вставьте его в окно SQL-запроса и измените «нужная_кодировка», «сопоставление» и «имя_базы» на кодировку, которая вам требуется, кодировку сопоставления и имя базы соответственно. Далее нажмите кнопку «Вперед».

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET нужная_кодировка COLLATE сопоставление;') as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'имя_базы'
ORDER BY 1

Окно запроса

4. В ответе появится список запросов для смены кодировки каждой таблицы. Во вкладке параметры выберите пункт «Полные тексты» и нажмите «Вперед».

Список запросов для смены кодировки БД

5. Скопируйте запросы, которые появились.

Полный список запросов для смены кодировки БД

6. Вернитесь в раздел SQL и вставьте в окно запроса скопированные данные.

Окно запроса

7. Нажмите кнопку «Вперед». Кодировка во всех таблицах базы данных успешно изменена.

Завершение смены кодировки БД

10.3.3 Database Character Set and Collation

Every database has a database character set and a database
collation. The CREATE DATABASE
and ALTER DATABASE statements
have optional clauses for specifying the database character set
and collation:

CREATE DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]
ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]

The keyword SCHEMA can be used instead of
DATABASE.

The CHARACTER SET and
COLLATE clauses make it possible to create
databases with different character sets and collations on the
same MySQL server.

Database options are stored in the data dictionary and can be
examined by checking the Information Schema
SCHEMATA table.

CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  • If both CHARACTER SET
    charset_name
    and
    COLLATE
    collation_name
    are
    specified, character set
    charset_name and collation
    collation_name are used.

  • If CHARACTER SET
    charset_name
    is
    specified without COLLATE, character set
    charset_name and its default
    collation are used. To see the default collation for each
    character set, use the SHOW CHARACTER
    SET
    statement or query the
    INFORMATION_SCHEMA
    CHARACTER_SETS table.

  • If COLLATE
    collation_name
    is
    specified without CHARACTER SET, the
    character set associated with
    collation_name and collation
    collation_name are used.

  • Otherwise (neither CHARACTER SET nor
    COLLATE is specified), the server
    character set and server collation are used.

The character set and collation for the default database can be
determined from the values of the
character_set_database and
collation_database system
variables. The server sets these variables whenever the default
database changes. If there is no default database, the variables
have the same value as the corresponding server-level system
variables, character_set_server
and collation_server.

To see the default character set and collation for a given
database, use these statements:

USE db_name;
SELECT @@character_set_database, @@collation_database;

Alternatively, to display the values without changing the
default database:

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';

The database character set and collation affect these aspects of
server operation:

  • For CREATE TABLE statements,
    the database character set and collation are used as default
    values for table definitions if the table character set and
    collation are not specified. To override this, provide
    explicit CHARACTER SET and
    COLLATE table options.

  • For LOAD DATA statements that
    include no CHARACTER SET clause, the
    server uses the character set indicated by the
    character_set_database
    system variable to interpret the information in the file. To
    override this, provide an explicit CHARACTER
    SET
    clause.

  • For stored routines (procedures and functions), the database
    character set and collation in effect at routine creation
    time are used as the character set and collation of
    character data parameters for which the declaration includes
    no CHARACTER SET or a
    COLLATE attribute. To override this,
    provide CHARACTER SET and
    COLLATE explicitly.

10.3.4 Table Character Set and Collation

Every table has a table character set and a table collation. The
CREATE TABLE and
ALTER TABLE statements have
optional clauses for specifying the table character set and
collation:

CREATE TABLE tbl_name (column_list) [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]]
ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]
CREATE TABLE t1 ( ... )
CHARACTER SET latin1 COLLATE latin1_danish_ci;
  • If both CHARACTER SET
    charset_name
    and
    COLLATE
    collation_name
    are
    specified, character set
    charset_name and collation
    collation_name are used.

  • If CHARACTER SET
    charset_name
    is
    specified without COLLATE, character set
    charset_name and its default
    collation are used. To see the default collation for each
    character set, use the SHOW CHARACTER
    SET
    statement or query the
    INFORMATION_SCHEMA
    CHARACTER_SETS table.

  • If COLLATE
    collation_name
    is
    specified without CHARACTER SET, the
    character set associated with
    collation_name and collation
    collation_name are used.

  • Otherwise (neither CHARACTER SET nor
    COLLATE is specified), the database
    character set and collation are used.

The table character set and collation are used as default values
for column definitions if the column character set and collation
are not specified in individual column definitions. The table
character set and collation are MySQL extensions; there are no
such things in standard SQL.

For applications that store data using the default MySQL character
set and collation (utf8mb4,
utf8mb4_0900_ai_ci), no special configuration
should be needed. If applications require data storage using a
different character set or collation, you can configure character
set information several ways:

Читайте также:  Панель https hosting timeweb ru

  • Specify character settings per database. For example,
    applications that use one database might use the default of
    utf8mb4, whereas applications that use
    another database might use sjis.

  • Specify character settings at server startup. This causes the
    server to use the given settings for all applications that do
    not make other arrangements.

  • Specify character settings at configuration time, if you build
    MySQL from source. This causes the server to use the given
    settings as the defaults for all applications, without having
    to specify them at server startup.

When different applications require different character settings,
the per-database technique provides a good deal of flexibility. If
most or all applications use the same character set, specifying
character settings at server startup or configuration time may be
most convenient.

The examples shown here assume use of the
latin1 character set and
latin1_swedish_ci collation in particular
contexts as an alternative to the defaults of
utf8mb4 and
utf8mb4_0900_ai_ci.

  • Specify character settings per database. 
    To create a database such that its tables use a given
    default character set and collation for data storage, use a
    CREATE DATABASE statement
    like this:

    CREATE DATABASE mydb CHARACTER SET latin1 COLLATE latin1_swedish_ci;

    Tables created in the database use latin1
    and latin1_swedish_ci by default for any
    character columns.

    Applications that use the database should also configure their
    connection to the server each time they connect. This can be
    done by executing a SET NAMES 'latin1'
    statement after connecting. The statement can be used
    regardless of connection method (the
    client, PHP scripts, and so forth).

    In some cases, it may be possible to configure the connection
    to use the desired character set some other way. For example,
    to connect using , you can specify the
    --default-character-set=latin1
    command-line option to achieve the same effect as SET
    NAMES 'latin1'
    .

    If you use ALTER DATABASE to
    change the database default character set or collation,
    existing stored routines in the database that use those
    defaults must be dropped and recreated so that they use the
    new defaults. (In a stored routine, variables with character
    data types use the database defaults if the character set or
    collation are not specified explicitly. See
    Section 13.1.17, “CREATE PROCEDURE and CREATE FUNCTION Statements”.)

  • Specify character settings at server startup. 
    To select a character set and collation at server startup,
    use the
    --character-set-server and
    --collation-server options.
    For example, to specify the options in an option file,
    include these lines:

    [mysqld]
    character-set-server=latin1
    collation-server=latin1_swedish_ci

    These settings apply server-wide and apply as the defaults for
    databases created by any application, and for tables created
    in those databases.

  • Specify character settings at MySQL configuration time. 
    To select a character set and collation if you configure and
    build MySQL from source, use the
    DEFAULT_CHARSET and
    DEFAULT_COLLATION
    options:

    cmake . -DDEFAULT_CHARSET=latin1 \ -DDEFAULT_COLLATION=latin1_swedish_ci

    The resulting server uses latin1 and
    latin1_swedish_ci as the default for
    databases and tables and for client connections. It is
    unnecessary to use
    --character-set-server and
    --collation-server to specify
    those defaults at server startup. It is also unnecessary for
    applications to configure their connection using
    SET NAMES or equivalent after
    they connect to the server.

Regardless of how you configure the MySQL character set for
application use, you must also consider the environment within
which those applications execute. For example, if you intend to
send statements using UTF-8 text taken from a file that you create
in an editor, you should edit the file with the locale of your
environment set to UTF-8 so that the file encoding is correct and
so that the operating system handles it correctly. If you use the
client from within a terminal window, the
window must be configured to use UTF-8 or characters may not
display properly. For a script that executes in a Web environment,
the script must handle character encoding properly for its
interaction with the MySQL server, and it must generate pages that
correctly indicate the encoding so that browsers know how to
display the content of the pages. For example, you can include
this <meta> tag within your
<head> element:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Что является (по умолчанию) кодировка:

  • Базы данных MySQL

  • Столбец в MySQL

 Zenshai

26-го июня 2009 в 4:07

...

Здесь’s, как я’d сделать это —

Для схемы (или баз данных — они являются синонимами):

 serhat

26-го января 2011 в 2:16

...

Nabeel Ahmed

17-го августа 2016 в 12:32

...

Для всех баз данных у вас на сервере:


Для единая база данных:


Получение сортировки таблицы:

Или — будет выводить полный SQL для создания таблицы:

в MySQL и GT; показывают, создать таблицу my_tablename


Получение сортировки колонки:

 Vex

26-го июня 2009 в 3:28

...

Показать статус в таблице будут перечислены все таблицы.

 DC-

21-го мая 2015 в 9:25

...

Просто используйте эти команды:

 Eric

26-го января 2011 в 2:56

...

в <предварительно>
ВЫБЕРИТЕ TABLE_SCHEMA,
ИМЯ_ТАБЛИЦЫ,
ККСД.CHARACTER_SET_NAME КАК DEFAULT_CHAR_SET,
ИМЯ_СТОЛБЦА,
COLUMN_TYPE,
С. CHARACTER_SET_NAME
Из регулярных выражений.ТАБЛИЦЫ Т
Объединить базы данных information_schema.СТОЛБЦЫ C ПОМОЩЬЮ (TABLE_SCHEMA, ИМЯ_ТАБЛИЦЫ)
Объединить базы данных information_schema.COLLATION_CHARACTER_SET_APPLICABILITY КАК ККСД
На (т. TABLE_COLLATION = ККСД.Параметр collation_name)
ГДЕ TABLE_SCHEMA=СХЕМЫ()
И С. Это в (‘перечисление’, ‘тип varchar’, ‘чар’, ‘текст’, ‘mediumtext’, ‘longtext’)
ЗАКАЗ ПО TABLE_SCHEMA,
ИМЯ_ТАБЛИЦЫ,
ИМЯ_СТОЛБЦА
;
</пред>

Читайте также:  Оптимизированная конфигурация WP SMTP: руководство для начинающих по успеху

 user1012513

12-го января 2018 в 8:39

...

Чтобы увидеть сортировки по умолчанию базы данных:

Чтобы увидеть сортировки таблицы:

Чтобы увидеть сортировки столбцов:

 chaos

26-го июня 2009 в 3:26

...

Я всегда просто смотрю на шоу создать таблицу данных mydatabase.моя_таблица`.

На базе, похоже, вы нужны выбрать DEFAULT_CHARACTER_SET_NAME из базы данных information_schema.Схемы`.

 James

26-го июня 2009 в 3:28

...

 sjas

11-го июня 2015 в 2:31

...

 amenko

9-го апреля 2011 в 7:54

...


В создании базы данных (MySQL), по умолчанию набор символов/сортировки всегда латинские, а не то, что вы выбрали другую по изначально создание базы данных

 WowPress.host

17-го мая 2018 в 8:45

...

Как многие писали ранее, показывают полный столбцов должно быть предпочтительным методом, чтобы получить сведения о столбце.
Что’s отсутствует способ получить кодировку, после чего, не достигнув таблиц метаданных напрямую:

10.5 Configuring Application Character Set and Collation

FAQ по программированиюФриланс - биржакаталог фрилансеровправила форумапомощьрейтингизбранное


Форум программистов Vingrad

10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation
10.5 Configuring Application Character Set and Collation

Сегодня речь пойдет о MySQL и о настройке UTF8 кодировки по-умолчанию.
Тема заезжена, но как я убедился за прошедшую неделю, мало кто в состоянии нормально пояснить какие параметры и куда надо прописать для полноценной работы с UTF8 в MySQL. К сожалению, ситуация на тематических блогах оставляет желать лучшего. Основной тип ответа — приведение соедржимого конфигурационного файла с комментарием типа “попробуй, у меня это работает”.

Основная цель данного поста — выяснить, какие параметры и с какими значениями следует прописать в конфигурационный файл my.cnf (my.ini) для дальнейшей беспроблемной работы с Юникодом.

Рабочее окружение

UTF8 на данный момент у меня успешно работает в Мастер-Слейв конфигурации:

  • MySQL версии 5.1.66
  • Два сервера CentOS версии 6.3
  • Репликация между серверами Master-Slave на базе SSL

Любой внешний клиент в состоянии корректно работать с UTF8 базой (проверено на EMS Manager for MySQL c Windows 8 x64).

Все опции и настройки я привожу для версии сервера 5.1.x, однако с минимальными (а то и вовсе без оных) изменениями все это будет работать и на версиях 5.5.x и 5.6.x.

Параметры кодировок MySQL

Довольно часто приходится видеть в ответах на вопросы о настройке UTF8 следующее:

[mysqld]
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake 

Предполагается, что после вставки всего этого добра (тут кстати есть противоречащие друг другу опции) в конфигурационный файл my.cnf (my.ini) магический Юникод начнет работать.

Но давайте забудем о списке и попытаемся разбираться со всеми опциями сами и начнем с самого начала. То есть с документации. Потому как все это прекрасно описано в документации MySQL на официальном сайте. Я лишь постараюсь последовательно рассказать о параметрах сервера и прояснить неясные моменты.

Главный раздел по описанию кодировок (character sets) и их представлений (collations — используется например при сортировке) в контексте сервера, базы, таблиц — это секция 10.1.3. Specifying Character Sets and Collations.

Символьная кодировка может быть задана для:

  1. сервера,
  2. базы данных,
  3. таблицы и
  4. колонок в таблице.

Сделано это для гибкой настройки баз данных и доступа клиентов с разными кодировками. Однако, последнее не входит в область рассмотрения данного поста, поэтому будем рассматривать вариант с кодировкой UTF8 настроенной для всего по-умолчанию.

Все параметры могут быть переданы серверу тремя разными способами:

  1. через командную строку mysqld
  2. через конфигурационный файл my.cnf (my.ini)
  3. через опции компиляции.

Второй и третий варианты рассматриваться не будут. Тут уместно будет просто прочитать официальные доки — в каждом разделе приведены примеры конфигурации с использованием всех трех способов. Я же буду использовать первый вариант.

Кодировка (character set) и представление (collation) сервера

Секция 10.1.3.1. Server Character Set and Collation

Кодировка (characher set) — набор используемых символов.
Представление (collation) — набор правил для сравнения символов в наборе.

Тут есть несколько фундаментальных вещей которые надо понимать.

Основные параметры используемые в контексте сервера — это character_set_server и collation_server. Оба параметра влияют на определение кодировки и отображения сервера MySQL.

Можно задать оба параметра либо только один из них. При этом важно знать как задача того или иного влияет на определение отсутствующего:

  • Не заданы — используются значения по умолчанию (дефолтные),

  • Заданы оба — используются указанные кодировка и ее представление,

  • Задана только кодировка — ее представление выставляется по умолчанию для данного типа кодировки. Что это значит? Для каждого типа кодировки есть ее дефолтное представление, например, дефолтная кодировка сервера — latin1, а дефолтное отображение для нее — latin1_swedish_ci.
    Посмотреть соответствие кодировки и ее дефолтного представления можно используя команду:

    SHOW COLLATION LIKE ‘your_character_set_name’;

    mysql> SHOW COLLATION LIKE ‘latin1%’;

     +-------------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +-------------------+---------+----+---------+----------+---------+ | latin1_german1_ci | latin1 | 5 | | Yes | 1 | | latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 | | latin1_danish_ci | latin1 | 15 | | Yes | 1 | | latin1_german2_ci | latin1 | 31 | | Yes | 2 | | latin1_bin | latin1 | 47 | | Yes | 1 | | latin1_general_ci | latin1 | 48 | | Yes | 1 | | latin1_general_cs | latin1 | 49 | | Yes | 1 | | latin1_spanish_ci | latin1 | 94 | | Yes | 1 | +-------------------+---------+----+---------+----------+---------+

Поле Default дает ответ о представлении выбранной кодировки.

В нашем случае, при настройке дефолтной кодировки в UTF8, параметры должны быть определены, так как могут быть использованы при определении кодировки или представления базы данных:

Наши команды:
my.cnf (my.ini)

Дефолтное представление для utf8 — utf8_general_ci, так что если бы мы его использовали вместо utf8_unicode_ci, то параметр collation_server можно было бы вообще опустить.

Кодировка (character set) и представление (collation) базы данных

Секция 10.1.3.2. Database Character Set and Collation
Секция 10.1.4. Connection Character Sets and Collations

Тут есть два варианта определения кодировки и представления:

  • явно — при выполнении запроса на создание базы данных:

    CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;

  • неявно через переменные character_set_database и collation_database.
    Однако, эти переменные нельзя задать явно ни в командной строке ни в конфигурационном файле. Как они инициализируются — чуть ниже.

Читайте также:  Dedicated Root Server Hosting - Hetzner Online GmbH

Вообще при работе с базой данных огромную роль помимо серверных настроек играют настройки клиент-серверного соединения (connection). На этом этапе вступают в игру следующие специфичные для соединения параметры:

  • character_set_client — кодировка в которой посылается запрос от клиента
  • character_set_connection — кодировка используемая для конвертации пришедшего запроса (statement’а)
  • character_set_results — кодировку, в которую сервер должен перевести результат перед его отправкой клиенту

Есть еще представление кодировки соединения (colation_connection). Для чего нужен этот параметр думаю пояснять не надо.

Озадачиваться проблемой инициализации всех этих переменных не стоит (хотя в нашем случае присвоить им значения необходимо).
Есть способ проще: существует два типа запросов (statements) которые задают настройки соединения клиента с сервером группой:

Запрос SET NAMES ‘charset_name’ [COLLATE ‘collation_name’]

Параметр определяет в какой кодировке теперь будут приходить сообщения для сервера от клиента. Прелесть в том, что запрос SET NAMES x эквивалентен следующей группе:

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

Для определении представления кодировки соединения (colation_connection) отличного от дефолтного, следует дополнить запрос:

SET NAMES x COLLATE y

А так как у нас utf8 и ее дефолтное представление utf8_general_ci, то нам нужно выпонить полный запрос:

SET NAMES utf8 COLLATE utf8_unicode_ci

Таким образом, используя только этот запрос, можно добиться корректной UTF8 инициализации соединения.

Однако, тут есть один нюанс:

SET NAMES x, как понятно из определения, определяет настройку клиента при коннекте к серверу. Но что делать, если клиент — сам mysql.exe и нам хочется установить collation_connection по-умолчанию, не выполняя каждый раз SET NAMES x при коннекте?
Для этих целей, существует еще один параметр — default_character_set.
Он эквивалентен запросу SET NAMES utf8. В случае его использования задать collation_connection отличный от дефолтного уже не получится, поэтому придется заюзать еще одну команду init_connect (так как напрямую collation_connection нельзя прописать в конфигурационном файле):

init_connect=‘SET collation_connection = utf8_unicode_ci’

Но и тут есть еще одно но: init_connect команда не выполняется для SUPER пользователей — пользователей, обладающих привилегией SUPER. root входит в этот перечень, поэтому при коннекте root’ом команду SET collation_connection = utf8_unicode_ci все же придется выполнить вручную.

Запрос SET CHARACTER SET charset_name

Запрос групповой и он также эквивалентен следующей группе:

За более детальной информацией отсылаю по двум источникам — собственно к официальной документации и прекрасно оформленному ответу на stackoverflow.com.
Для нашей задачи вполне хватает первого параметра вместе с дополнительной командой.

Подытожим: различные сценарии и что юзается на каждом из них — относительно к настройкам соединения:

  • Если к базе коннектится mysql.exe клиент с пользователем с привилегией SUPER:
    • срабатывает опция в конфигурационном файле default_character_set = utf8
    • надо выполнить вручную команду init_connect='SET collation_connection = utf8_unicode_ci'
  • Если к базе коннектится mysql.exe клиент с пользователем без привилегии SUPER:
    • срабатывает опция в конфигурационном файле default_character_set = utf8
    • срабатывает команда в конфигурационном файле init_connect='SET collation_connection = utf8_unicode_ci'
  • Если к базе коннектится внешний клиент:
    • надо выполнить вручную команду SET NAMES utf8 COLLATE utf8_unicode_ci

Наши команды:
my.cnf (my.ini)

Кодировка (character set) и представление (collation) таблиц

Секция 10.1.3.3. Table Character Set and Collation

Тут все довольно просто. Задать кодировку и ее представление можно через команды:

Тут главное иметь в виду, что если эти настройки не заданы, то берутся настройки базы данных (см. пред. раздел). Нам эти настройки не интересны.

Кодировка (character set) и представление (collation) колонок в таблице

Секция 10.1.3.4. Column Character Set and Collation

Тут по аналогии с пред. секцией. Если параметры кодировок не указаны, берутся те, что указывались для таблицы.

skip-character-set-client-handshake

Помимо освещенных параметров, есть еще один довольно часто фигурирующий в разного рода источниках — skip-character-set-client-handshake. Установка этого параметра позволит проигнорировать информацию клиента о кодировке. Я данный параметр не использовал.

Верификация настроек

Итак, вот финальный snapshot наших изменений в файле my.cnf (my.ini):

После применения всех опций и рестарта сервера mysql для проверки настроек можно воспользоваться командами SHOW VARIABLES LIKE 'char%' и SHOW VARIABLES LIKE 'collation%';

Состояние среды до изменений:

mysql> SHOW VARIABLES LIKE'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+

Состояние среды после изменений (в случае, если вы приконнектились не SUPER пользователем):

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 |
+----------------------+-----------------+

Для примера, вот отличие при соединении через mysql.exe пользователем с и без привилегии SUPER:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | **utf8_general_ci** |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+

с привилегией и выполненной вручную командой ‘SET collation_connection = utf8_unicode_ci’:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+

Поздравляю, теперь ваши база, таблицы и все в таблицах по-умолчанию в кодировке UTF8.


Ссылки

  1. Официальное руководство MySQL версии 5.1
  2. Отличие utf8_unicode_ci от utf8_general_ci
  3. “MySQL Character Set Support” на informit.com позволит вам больше узнать о том что есть characher set и collation.

Оцените статью
Хостинги