MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでバイナリデータが正しく表示されないときは?適切なデータ型「BIT型」の使い方

MySQLでバイナリデータを扱うならBIT型を使う

MySQLでバイナリデータを格納する場合には、BIT型を使用するのが最適です。BIT型を使えばビット列をそのまま保存でき、あとからBIN()関数で2進数として確認することもできます。

まず、BIT(5)型のカラムを持つテーブルを作成してみましょう。

mysql> create table DemoTable(binaryValue BIT(5));
Query OK, 0 rows affected (0.83 sec)

INSERTコマンドでレコードを挿入する

次に、INSERTコマンドを使ってテーブルにレコードを追加します。

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(15);
Query OK, 1 row affected (0.15 sec)

SELECTだけでは値が見えない

SELECT文ですべてのレコードを表示してみます。

mysql> select *from DemoTable;

実行結果は以下のとおりです。ご覧のとおり、レコードは存在しているのに値が空欄のように見えます。これは、バイナリデータがそのままでは人間が読める文字として表示されないためです。

+-------------+
| binaryValue |
+-------------+
|             |
|             |
+-------------+
2 rows in set (0.00 sec)

BIN()関数でバイナリデータを表示する

挿入したバイナリデータを確認するには、BIN()関数を使用します。

mysql> select bin(binaryValue) from DemoTable;

実行結果は次のとおりです。

+------------------+
| bin(binaryValue) |
+------------------+
| 1010             |
| 1111             |
+------------------+
2 rows in set (0.00 sec)

10進数の「10」は2進数で「1010」、「15」は「1111」に対応していることがわかります。

b'1010'形式(ビットリテラル)で挿入した場合の例

続いて、別の例を見てみましょう。b'1010'のようなビットリテラル表記でバイナリデータを挿入しても、SELECTだけではやはり値は表示されません。

mysql> insert into DemoTable VALUES (b'1010'),(b'1111');
Query OK, 2 rows affected (0.52 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select *from DemoTable;
+-------------+
| binaryValue |
+-------------+
|             |
|             |
|             |
|             |
+-------------+
4 rows in set (0.00 sec)

もう一度テーブルの内容をBIN()関数で確認してみます。

mysql> select bin(binaryValue) from DemoTable;

実行結果は以下のとおりです。

+------------------+
| bin(binaryValue) |
+------------------+
| 1010             |
| 1111             |
| 1010             |
| 1111             |
+------------------+
4 rows in set (0.00 sec)

まとめ

MySQLでバイナリデータを扱う際は、BIT型を選択し、確認時にはBIN()関数を組み合わせることで、2進数の値を正しく把握できます。SELECT文だけでは値が空欄に見えても、データ自体は正しく挿入されていますので心配いりません。「値が見えない=挿入に失敗」ではないという点を覚えておきましょう。

  1. MySQLで長い小数を扱うには?DECIMAL(21,20)の使い方を解説

    MySQLで小数点以下の桁数が多い数値(長い小数)を正確に保存したい場合は、DECIMAL(21,20)を使用します。DECIMAL型は固定小数点型であり、FLOATやDOUBLEと異なり丸め誤差が発生しないため、高精度な数値の保存に最適です。DECIMAL(21,20)とはDECIMAL(21,20)は「全体で21桁、うち小数点以下が20桁」という意味です。そのため整数部分は1桁しか表現できません。より多くの整数桁が必要な場合は、DECIMAL(25,20)のように定義を調整しましょう。テーブルの作成まず、以下のようにテーブルを作成します。mysql> create table Dem

  2. 血液型を保存するにはどのMySQLデータ型を使うべき?varcharとENUMの使い分けを解説

    血液型を保存するためのMySQLデータ型血液型(BloodType)を保存する場合は、varchar(3) または ENUM 型を使用するのが適しています。血液型は「A+」「A-」「B+」「B-」「AB+」「AB-」「O+」「O-」のように最大3文字で表現できるため、varchar(3)で十分に対応できます。まず、テーブルを作成してみましょう。mysql> create table DemoTable1855 ( BloodType varchar(3) );Query OK, 0 rows affected (0.00 sec)次に、insertコマンドを使ってテーブ