MySQLのCHAR()関数に255より大きい値を指定すると、何が返されるのか?
MySQLでは、CHAR()関数に255より大きい整数を引数として指定すると、その値は自動的に複数のバイト列へ変換されて処理されます。つまり、大きな数値は256を基数として分解され、各バイトに対応する文字が連結された文字列として返されます。
例えば、CHAR(256)は「1×256+0」と分解できるためCHAR(1,0)と同等になり、同様にCHAR(260)はCHAR(1,4)と同等になります。
実行例
以下のSQL文を実行すると、CHAR(256)とCHAR(1,0)がまったく同じ結果を返すことが確認できます。
mysql> Select HEX(CHAR(256)),HEX(CHAR(1,0)); +----------------+----------------+ | HEX(CHAR(256)) | HEX(CHAR(1,0)) | +----------------+----------------+ | 0100 | 0100 | +----------------+----------------+ 1 row in set (0.00 sec)
結果の解説
上記の結果セットを見ると、CHAR(256)の出力(16進数表記で「0100」)がCHAR(1,0)の出力と完全に一致していることがわかります。このように、255を超える引数は複数バイトへ自動的に分割されるため、CHAR()関数ではUnicodeのコードポイントのような、より大きな数値も問題なく扱うことができます。
-
ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?
MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった
-
MySQLでCHAR()関数の逆の処理を行う方法|ASCII()とORD()の違いを解説
MySQLにおいて、CHAR()関数の逆の働きをするのは ASCII() 関数と ORD() 関数です。CHAR() は数値(文字コード)を文字に変換する関数ですが、ASCII() は引数の文字列の左端の文字に対応する数値(ASCIIコード)を返し、ORD() は左端の文字の文字コードを返します。 ASCII()とORD()の違い どちらも文字から数値への変換を行う点は共通していますが、以下のような違いがあります。 ASCII():シングルバイト文字専用。マルチバイト文字を渡すと警告が出て64を返します。 ORD():マルチバイト文字にも対応しており、最初のバイトの値に基づいて計算された文字