MariaDBでは、BINARY
演算子は、それに続く文字列をバイナリ文字列にキャストします。
BINARY
演算子を使用すると、文字ごとではなく、バイトごとに列を比較できます。これにより、列がBINARY
として定義されていない場合でも、比較で大文字と小文字が区別されます。 またはBLOB
。また、先頭/末尾のスペースが重要になることも意味します。
例
簡単な例を次に示します。
SELECT BINARY 'Cat';
結果:
+--------------+ | BINARY 'Cat' | +--------------+ | Cat | +--------------+
この例は、BINARY
がどのように機能するかを実際には示していません。 演算子は文字列の比較に影響を与える可能性があります。次の例はそうです。
リーディング/トレーリングスペース
前述のように、文字列をバイトごとに比較する場合(つまり、BINARY
を使用する場合、先頭と末尾のスペースは重要です。 。
まず、先頭または末尾にスペースを入れずに文字列を比較します。
SELECT
'Cat' = 'Cat',
BINARY 'Cat' = 'Cat';
結果:
+---------------+----------------------+ | 'Cat' = 'Cat' | BINARY 'Cat' = 'Cat' | +---------------+----------------------+ | 1 | 1 | +---------------+----------------------+
BINARY
を使用しても、同じ戻り値が得られます かどうか。
ただし、文字列の1つに末尾のスペースを追加すると次のようになります。
SELECT
'Cat' = 'Cat ',
BINARY 'Cat' = 'Cat ',
'Cat' = BINARY 'Cat ',
BINARY 'Cat' = BINARY 'Cat ';
結果:
+----------------+-----------------------+-----------------------+------------------------------+ | 'Cat' = 'Cat ' | BINARY 'Cat' = 'Cat ' | 'Cat' = BINARY 'Cat ' | BINARY 'Cat' = BINARY 'Cat ' | +----------------+-----------------------+-----------------------+------------------------------+ | 1 | 0 | 0 | 0 | +----------------+-----------------------+-----------------------+------------------------------+
最初のものは1
を返します 一方、他のもの(つまり、BINARY
を持つもの) )return 0
。
念のため、両方に末尾にスペースがある文字列を比較してみましょう。
SELECT
'Cat ' = BINARY 'Cat ',
BINARY 'Cat ' = BINARY 'Cat ';
結果:
+------------------------+-------------------------------+ | 'Cat ' = BINARY 'Cat ' | BINARY 'Cat ' = BINARY 'Cat ' | +------------------------+-------------------------------+ | 1 | 1 | +------------------------+-------------------------------+
ここでは、先頭と末尾のスペースについてのみ話していることに注意してください。この概念は、文字列の途中のスペースには適用されません。
たとえば、BINARY
を使用しなくても、文字列内の2つのスペースは1つのスペースと等しくありません。 演算子:
SELECT 'Homer Jay' = 'Homer Jay';
結果:
+----------------------------+ | 'Homer Jay' = 'Homer Jay' | +----------------------------+ | 0 | +----------------------------+
この場合、最初の文字列には1つのスペースが含まれ、2番目の文字列には2つのスペースが含まれます。文字ごとの比較を使用する場合でも、不平等になるにはそれで十分です。
大文字と小文字の区別
BINARY
照合で大文字と小文字が区別されない場合でも、演算子は大文字と小文字を区別する比較を強制します。
たとえば、これが私の接続の照合です:
SELECT @@collation_connection;
結果:
+------------------------+ | @@collation_connection | +------------------------+ | utf8_general_ci | +------------------------+
ci
最後に、大文字と小文字を区別しないを意味します 。
大文字と小文字の文字列の文字列比較の例を次に示します。
SELECT
'cat' = 'CAT',
BINARY 'cat' = 'CAT';
結果:
+---------------+----------------------+ | 'cat' = 'CAT' | BINARY 'cat' = 'CAT' | +---------------+----------------------+ | 1 | 0 | +---------------+----------------------+
私の照合では大文字と小文字が区別されないため、最初の比較では1が返されました。 2番目のものは0
を返しました 、BINARY
を使用しているため オペレーター。
このような文字列比較で得られる結果(BINARY
なし) 演算子)は、照合によって異なります。大文字と小文字を区別する照合を使用すると、BINARY
で取得したのと同じ結果が返されます。 。
デモンストレーションの例を次に示します。
SELECT
_latin1'cat' COLLATE latin1_general_ci = 'CAT' AS 'ci',
_latin1'cat' COLLATE latin1_general_cs = 'CAT' AS 'cs',
BINARY 'cat' = 'CAT';
結果:
+------+------+----------------------+ | ci | cs | BINARY 'cat' = 'CAT' | +------+------+----------------------+ | 1 | 0 | 0 | +------+------+----------------------+
ここでは、文字セットと照合を文字列レベルで明示的に指定しました。これを行うための構文は次のようになります:
[_charset_name]'string' [COLLATE collation_name]
大文字と小文字を区別しない照合では、大文字と小文字を区別する照合とは異なる結果が返されることがわかります。また、大文字と小文字を区別する照合では、BINARY
を使用した場合と同じ結果が返されました。 オペレーター。