MySQLでCHAR()関数の逆の処理を行う方法|ASCII()とORD()の違いを解説
MySQLにおいて、CHAR()関数の逆の働きをするのは ASCII() 関数と ORD() 関数です。CHAR() は数値(文字コード)を文字に変換する関数ですが、ASCII() は引数の文字列の左端の文字に対応する数値(ASCIIコード)を返し、ORD() は左端の文字の文字コードを返します。
ASCII()とORD()の違い
どちらも文字から数値への変換を行う点は共通していますが、以下のような違いがあります。
- ASCII():シングルバイト文字専用。マルチバイト文字を渡すと警告が出て64を返します。
- ORD():マルチバイト文字にも対応しており、最初のバイトの値に基づいて計算された文字コードを返します。
検証用テーブルの作成
まず、動作確認のためのテーブルを作成しましょう。
mysql> create table DemoTable
(
Value int,
Value1 char(1),
Value2 char(1)
);
Query OK, 0 rows affected (0.80 sec)
レコードの挿入
INSERT文を使って、数値とそれに対応する文字のペアを登録します。「65」は「A」、「97」は「a」に対応する文字コードです。
mysql> insert into DemoTable values(65,'A','A'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(97,'a','a'); Query OK, 1 row affected (0.13 sec)
登録データの確認
SELECT文でテーブル内の全レコードを表示します。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------+--------+--------+ | Value | Value1 | Value2 | +-------+--------+--------+ | 65 | A | A | | 97 | a | a | +-------+--------+--------+ 2 rows in set (0.00 sec)
ASCII()とORD()を実行してみる
それでは、CHAR()・ASCII()・ORD() を組み合わせて実行し、互いに逆の変換が行われることを確認してみましょう。
mysql> select char(Value),ASCII(Value1),ORD(Value2) from DemoTable;
実行結果は以下の通りです。
+-------------+---------------+-------------+ | char(Value) | ASCII(Value1) | ORD(Value2) | +-------------+---------------+-------------+ | A | 65 | 65 | | a | 97 | 97 | +-------------+---------------+-------------+ 2 rows in set (0.03 sec)
このように、char(Value) で数値が文字に変換され、ASCII(Value1) および ORD(Value2) でその文字が元の数値に戻っていることが分かります。つまり、CHAR() の逆関数として ASCII() と ORD() のどちらでも同じ結果が得られます。
-
MySQLの「<>」演算子とは?意味と使い方を実例付きで解説
MySQLにおける「<>」演算子の意味 MySQLで使われる記号「<>」は、「等しくない」ことを判定する比較演算子であり、おなじみの「!=」(NOT EQUAL)演算子とまったく同じ働きをします。どちらも結果はブール値としてtinyint(1)型で返され、条件が成立すれば1、成立しなければ0となります。 ケース1:「!=」演算子を使用する場合 まずは「!=」演算子を使ったシンプルな例です。次のクエリを実行してみましょう。 mysql> select 3!=5; 実行結果は以下の通りです。 +------+ | 3!=5 | +------+ | 1 | +-
-
MySQLのDECIMAL(x,0)で扱える数値の範囲はどのくらい?
MySQLでは、DECIMAL型はINTEGER型やBIGINT型よりも大きな数値を扱うことができます。BIGINTの場合、最大で18446744073709551615まで格納できますが、DECIMALではDECIMAL(65,0)を指定することで、65桁すべてが「9」の巨大な数値を保存することが可能です。DECIMAL(x,0)に必要なストレージ容量DECIMALは数値をバイト単位で格納しており、必要なストレージ容量は次の計算式で求められます。StorageRequirementInBytes = (x/9) + remaining; WHERE remaining = round_up(