Приведение типов в MySQL
Здесь речь пойдёт об основных способах приведения типов в MySQL. Заранее следует оговорить тот момент, что в большинстве случаев приведение типов в MySQL сработает автоматически, например:
//Выполнив запрос:
select 1+'1';
//Получим результат: 2
Однако в ряде случаев требуется специальное приведение типов, о них и пойдёт речь далее.
Случай первый — Сравнение строк (ключевое слово BINARY)
В СУБД MySQL сравнение тестовых строк не зависит от регистра сравниваемых строк. Например, если мы будем сравнивать строки «Чупакабра крут» и «ЧУПАКАБРА КРУТ», то MySQL сочтёт их идентичными.
//Для
select "Чупакабра крут" = "ЧУПАКАБРА КРУТ";
//Получим результат: 1 //Тоесть True;
Однако, есть метод чтобы обойти эту особенность, заключается он в сравнении двух строк как двоичных последовательностей, для этого строка при помощи ключевого слова BINARY преобразуется в таковую.
//Например
select binary "Чупакабра крут" = "ЧУПАКАБРА КРУТ";
//Получим результат: 0 //Тоесть False;
Использовать ключевое слово BYNARY в данном случае, возможно как слева от оператора сравнения так и справа.
//Пример использования оператора слева
select binary "Чупракабра крут" = "ЧУПАКАБРА КРУТ";
//Пример использованиея оператора справа
select "Чупакабра крут" binary = "ЧУПАКАБРА КРУТ";
Случай второй — функция CAST
В MySQL существует функция CAST() — которая является стандартной функцией SQL и поддерживается и многими другими базами данных помимо MySQL.
Назначение функции CAST() — это преобразование выражения из одного типа в другой.
Функция имеет следующий синтаксис:
CAST(expr AS type)
Результатом работы данной функции, будет являться преобразованное выражение expr к типу type.
Тип type, может принимать значения:
BINARY
CHAR
DATE
DATETIME
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
Пример работы функции:
//Для запроса:
select 20091201 as field1, cast(20091201 as date) as field2;
//Получим результат:
field1 | field2
20091201 | 2009-12-01
Функция CAST() часто используется для сортировки полей типа ENUM по алфавиту а не по численному значению.
Делается это так:
select * from table order by CAST(field as char);
//Где field - поле типа ENUM
Также функция часто используется для приведения формата даты:
select now();
//Получим результат: 2011-03-30 10:12:11
select cast(now() as date);
//Получим результат: 2011-03-30
Случай третий — перекодировка CONVERT
Третий вариант изменения типа данных, использование функции CONVERT() которая имеет следующий синтаксис:
//Вариант №1
convert(expr, type);
//Вариант №2
convert(expr USING charset);
В первом варианте действие функции CONVERT() идентично функции CAST().
Второй вариант функции CONVERT() используется для преобразования текста из одной кодировки в другую.
Пример:
select convert('Чупакабра крут' using koi8r);
//Вернёт результат:
"вСОЮЙЮАПЮ ЙПСР"
Существует и альтернативный синтаксис:
select _koi8r'Чупакабра крут';
//Вернёт результат:
"вСОЮЙЮАПЮ ЙПСР"
При этом варианте перед преобразуемой строкой помещается имя кодировки, которое предваряет символ подчеркивания.