Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

MySQL и SET NAMES 'utf8'

#mysql #encoding


В MySQL создается БД таким образом CREATE DATABASE db_name DEFAULT CHARACTER SET 'utf8';
В каких случаях нужно выполнять SET NAMES 'utf8' и для чего это нужно?
    


Ответы

Ответ 1



SET NAMES utf8 используется, когда у вас сервер не настроен на прием данных в вашей кодировке (в данном случае UTF8). Тогда ему нужно явно сообщить, что вы будете отправлять данные в кодировке UTF8 и не требуется дополнительная перекодировка данных из latin1 в UTF8 (по умолчанию он ожидает данные именно в latin1). Для того, чтобы на сервере для кодировки соединения вместо latin1 установить UTF8 следует в my.cnf секции [mysqld] установить директиву character_set_connection [mysqld] ... character_set_connection=utf8

Ответ 2



SET NAMES 'utf8' устанавливает кодировку соединения, т.е. кодировку, в которой клиент обменивается данными с сервером. Это необходимо делать потому, что стандартная кодировка соединения в вашей системе вполне может быть latin1 - ещё хуже, когда она перестанет совпадать после переноса скрипта или обновления баз. Сервер mysql сам проведет конвертацию данных, если таблица будет содержать данные в другой кодировке. Правда, это может привести к ошибкам, если, к примеру, записать в таблицу CREATE TABLE `t` (`a` VARCHAR(255) NULL DEFAULT NULL) COLLATE='cp1251_general_ci' ENGINE=InnoDB; символ ▲, которого в кодировке таблицы нет. таблицы в базе могут быть в любой кодировке. отдельные поля в таблице также могут иметь свою кодировку.

Ответ 3



ребят, существует руководство по MySql, которое говорит, что SET NAMES экивалентент вот этим трем командам: SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;

Комментариев нет:

Отправить комментарий