Spec-Zone .ru
спецификации, руководства, описания, API
|
BINARY
оператор бросает строку после этого к двоичной строке. Это - легкий способ вынудить сравнение
столбца быть сделанным байтом байтом, а не символом символом. Это заставляет сравнение быть
чувствительным к регистру, даже если столбец не определяется как BINARY
или BLOB
. BINARY
также конечные пробелы причин, чтобы быть существенным.
mysql>SELECT 'a' = 'A';
-> 1mysql>SELECT BINARY 'a' = 'A';
-> 0mysql>SELECT 'a' = 'a ';
-> 1mysql>SELECT BINARY 'a' = 'a ';
-> 0
В сравнении, BINARY
влияет на всю работу; это может быть дано перед любым
операндом с тем же самым результатом.
BINARY
сокращение для str
CAST(
. str
AS BINARY)
Отметьте, что в некоторых контекстах, если Вы бросаете индексированный столбец к BINARY
, MySQL не в состоянии использовать индексирование эффективно.
CAST()
функция
берет выражение любого типа и производит значение результата указанного типа, подобного CONVERT()
. См. описание CONVERT()
для получения дополнительной информации.
CONVERT(
, expr
,type
)CONVERT(
expr
USING transcoding_name
)
CONVERT()
и
CAST()
функции
берут выражение любого типа и производят значение результата указанного типа.
type
поскольку результатом может быть одно из следующих
значений:
BINARY
производит
строку с BINARY
тип данных. См. Раздел 11.4.2," BINARY
и VARBINARY
Типы" для
описания того, как это влияет на сравнения. Если дополнительная длина N
дается, BINARY(
заставляет
бросок использовать не больше, чем N
)N
байты параметра.
Значения короче чем N
байты дополняются 0x00
байты к длине N
.
CHAR(
заставляет бросок использовать не больше,
чем N
)N
символы параметра.
CAST()
и CONVERT(... USING
...)
стандартный синтаксис SQL. Не -USING
форма CONVERT()
синтаксис ODBC.
CONVERT()
с
USING
используется, чтобы преобразовать данные между различными
наборами символов. В MySQL транскодирующие имена являются тем же самым как соответствующими именами
набора символов. Например, этот оператор преобразовывает строку 'abc'
в
наборе символов значения по умолчанию к соответствующей строке в utf8
набор символов:
SELECT CONVERT('abc' USING utf8);
Обычно, невозможно сравнить a BLOB
значение или другая двоичная строка нечувствительным к регистру способом, потому что у двоичных строк нет
никакого набора символов, и таким образом никакого понятия lettercase. Чтобы выполнить нечувствительное к
регистру сравнение, используйте CONVERT()
функционируйте, чтобы преобразовать значение в недвоичную строку. Сравнения результата используют строковое
сопоставление. Например, если у набора символов результата есть нечувствительное к регистру сопоставление, a LIKE
работа не
является чувствительной к регистру:
SELECT 'A' LIKE CONVERT(blob_col
USING latin1) FROMtbl_name
;
Чтобы использовать различный набор символов, замените его именем latin1
в
предыдущем операторе. Чтобы определить определенное сопоставление для преобразованной строки, используйте a
COLLATE
пункт после CONVERT()
вызовите, как описано в Разделе
10.1.9.2,"CONVERT()
и CAST()
".
Например, чтобы использовать latin1_german1_ci
:
SELECT 'A' LIKE CONVERT(blob_col
USING latin1) COLLATE latin1_german1_ci FROMtbl_name
;
CONVERT()
может
использоваться более широко для того, чтобы сравнить строки, которые представляются в различных наборах
символов.
LOWER()
(и UPPER()
) неэффективны, когда применялся к двоичным строкам (BINARY
, VARBINARY
,
BLOB
). Чтобы выполнить lettercase преобразование, преобразуйте строку в
недвоичную строку:
mysql>SET @str = BINARY 'New York';
mysql>SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));
+-------------+-----------------------------------+| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |+-------------+-----------------------------------+| New York | new york |+-------------+-----------------------------------+
Функции броска полезны, когда Вы хотите создать столбец с определенным типом в a CREATE TABLE ... SELECT
оператор:
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
Функции также могут быть полезными для сортировки ENUM
столбцы в лексическом порядке. Обычно, сортировка ENUM
столбцы происходят, используя внутренние числовые значения. Кастинг значений
к CHAR
результаты в лексическом виде:
SELECTenum_col
FROMtbl_name
ORDER BY CAST(enum_col
AS CHAR);
CAST(
та же самая вещь как str
AS BINARY)BINARY
. str
CAST(
обрабатывает
выражение как строку с набором символов значения по умолчанию. expr
AS CHAR)
CAST()
также изменяет
результат, если Вы используете его в качестве части более сложного выражения такой как CONCAT('Date: ',CAST(NOW() AS DATE))
.
Недопустимо использовать CAST()
извлечь данные в различных форматах, но вместо этого использовать строковые функции как LEFT()
или EXTRACT()
. См. Раздел 12.7, "Дата
и Функции Времени".
Чтобы бросить строку к числовому значению в числовом контексте, Вы обычно ничего не должны сделать кроме использовать строковое значение, как если бы это было число:
mysql> SELECT
1+'1';
-> 2
Если Вы используете строку в арифметической работе, это преобразовывается в число с плавающей точкой во время вычисления выражения.
Если Вы используете число в строковом контексте, число автоматически преобразовывается в строку:
mysql> SELECT CONCAT('hello you ',2);
-> 'hello you 2'
Для получения информации о неявном преобразовании чисел к строкам см. Раздел 12.2, "Преобразование типов в Вычислении выражения".
MySQL поддерживает арифметику и с подписанными и с 64-разрядными значениями без знака. Если Вы используете
числовые операторы (такой как +
или -
) и один из операндов
является целым без знака, результат без знака по умолчанию (см. Раздел
12.6.1, "Арифметические Операторы"). Можно переопределить это при использовании SIGNED
или UNSIGNED
оператор броска, чтобы бросить
значение к подписанному или 64-разрядному целому числу без знака, соответственно.
mysql>SELECT CAST(1-2 AS UNSIGNED)
-> 18446744073709551615mysql>SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1
Если любой операнд является значением с плавающей точкой, результат является значением с плавающей точкой и не
влияется предыдущим правилом. (В этом контексте, DECIMAL
значения столбцов расцениваются как значения с плавающей точкой.)
mysql> SELECT CAST(1 AS UNSIGNED) -
2.0;
-> -1.0
Режим SQL влияет на результат операций преобразования. Примеры:
Если Вы преобразовываете "нулевую"
строку даты в дату, CONVERT()
и CAST()
возвратиться NULL
и произведите предупреждение когда NO_ZERO_DATE
Режим SQL включается.
Для целочисленного вычитания, если NO_UNSIGNED_SUBTRACTION
Режим SQL включается, результат вычитания
подписывается, даже если какой-либо операнд без знака.
Для получения дополнительной информации см. Раздел 5.1.7, "Режимы SQL Сервера".