BINARY
オペレータは 2
進性の文字列に続く文字列を送信します。これはカラムの比較を強制的に、文字ごとでなくバイトごとに行わせる簡易な方法です。カラムが
BINARY
または BLOB
と定義されていない場合でも、大文字小文字を区別した比較になります。BINARY
は後続のスペースにも重要な意味を持たせます。
mysql>SELECT 'a' = 'A';
-> 1 mysql>SELECT BINARY 'a' = 'A';
-> 0 mysql>SELECT 'a' = 'a ';
-> 1 mysql>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[(
N
)]
CHAR[(
N
)]
DATE
DATETIME
DECIMAL[(
M
[,D
])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
BINARY
は、BINARY
データ型を持つ文字列を生成します。これが比較に及ぼす影響については
項6.4.2. 「BINARY
と
VARBINARY
型」
をご覧ください。任意の長さ
N
が与えられた場合、BINARY(
は、キャストが N
)N
バイト以下の引数を使用する原因となります。N
バイトより短い値は、0x00
バイトで N
の長さまでパッドされます。
CHAR(
節は、キャストが N
)N
文字以下の引数を使用する原因になります。
CAST()
および CONVERT(...
USING ...)
は標準の SQL
シンタックスです。CONVERT()
の非 USING
フォームは ODBC シンタックスです。
USING
を持つ
CONVERT()
は、異なるキャラクタセット間のデータを変換するのに使用されます。MySQL
では、トランスコーディング名は対応するキャラクタセット名と同じです。たとえば、このステートメントは、デフォルトのキャラクタセットの文字列
'abc'
を、utf8
キャラクタセットの対応文字列に変換します。
SELECT CONVERT('abc' USING utf8);
バイナリ列はキャラクタセットを持たないため、通常は
BLOB
値、またはバイナリ列を、大文字小文字の区別のない方法で比較はできず、従って大文字小文字という概念はありません。大文字小文字を区別しない比較を行うには、CONVERT()
関数を使用して、値を非バイナリ列に変換します。結果のキャラクタセットが大文字小文字を区別しない照合を得た場合、LIKE
演算は大文字小文字の区別をしません :
SELECT 'A' LIKE CONVERT(blob_col
USING latin1) FROMtbl_name
;
異なるキャラクタセットを使用するには、先行するステートメントで、その名前を
latin1
の代わりにします。大文字小文字の区別のない照合を確実に使用するには、CONVERT()
呼び出しの後に
COLLATE
節を特定します。
CONVERT()
を、異なるキャラクタセットで示されている文字列の比較に、より一般的に使用することができます。
キャスト関数は次のように、CREATE
... 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)
CONCAT('Date: ',CAST(NOW() AS
DATE))
のようなより複雑な式の一部として使用する場合、CAST()
もまた結果を変えます。
データを異なるフォーマットに抽出するには、CAST()
ではなく、LEFT()
または EXTRACT()
のような文字列関数を使用します。項7.6. 「日付時刻関数」
を参照してください。
文字列を数値コンテキストの数値にキャストするには、通常は文字列値を数字のように使用するだけで済みます。
mysql> SELECT 1+'1';
-> 2
文字列コンテキストで数字を使用する場合、その数字は自動的に
BINARY
文字列に変換されます。
mysql> SELECT CONCAT('hello you ',2);
-> 'hello you 2'
MySQL は、符号付きでも、符号なしでも、64
バイト値での演算をサポートします。算術演算子
(+
または
-
など)
を使用しており、演算のひとつは符号のない整数である場合、結果は符合なしになります。SIGNED
および UNSIGNED
キャスト演算子を使用して、演算を符号付き、または符号なしの
64
ビットの整数にキャストすることで、これをそれぞれオーバーライドすることができます。
mysql>SELECT CAST(1-2 AS UNSIGNED)
-> 18446744073709551615 mysql>SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1
オペランドのどちらかが浮動小数点値である場合、結果は浮動小数点値になり、前の規則には影響を受けません。(このコンテキストでは、DECIMAL
カラム値は浮動小数点値とみなされます)。
mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
-> -1.0
算術演算で文字列を使用している場合、これは浮動小数点数に変換されます。
「zero」
日付文字列を日付に変換する場合、CONVERT()
と CAST()
は
NULL
を返し、NO_ZERO_DATE
SQL モードが有効になれば警告を発行します。