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

文字列データ型にCHARACTER SET binary属性を指定すると、MySQLはどのような挙動を示すのか?

MySQLでは、文字列データ型に対して「CHARACTER SET binary」属性を指定すると、そのカラムは対応するバイナリ文字列型として自動的に作成されます。この際に行われる型の変換は、以下のとおりです。

  • CHAR → BINARY に変換される
  • VARCHAR → VARBINARY に変換される
  • TEXT → BLOB に変換される

ただし、このような変換はENUM型およびSET型には適用されません。これら2つの型については、テーブル作成時に宣言した通りの定義がそのまま維持されます。

具体例

以下の例では、「EMP」という名前のテーブルを作成しています。4つのカラムすべてに「CHARACTER SET binary」を指定している点に注目してください。

mysql> Create table Emp(Name varchar(10) CHARACTER SET binary, Address CHAR(10) CHARACTER SET binary, Designation TEXT CHARACTER SET binary, Field ENUM('ENG','SS') CHARACTER SET binary);
Query OK, 0 rows affected (0.16 sec)

続いて、次のクエリでテーブルの実際の定義を確認してみましょう。MySQLが各データ型を対応するバイナリ文字列型へ自動的に変更していることがわかります。

mysql> Show Create Table EMP\G
*************************** 1. row ***************************
       Table: EMP
Create Table: CREATE TABLE `emp` (
    `Name` varbinary(10) DEFAULT NULL,
    `Address` binary(10) DEFAULT NULL,
    `Designation` blob,
    `Field` enum('ENG','SS') CHARACTER SET binary DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

結果のポイント

上記の出力から、以下の変換が行われたことが確認できます。

  • VARCHAR(10) が varbinary(10) へ変換された
  • CHAR(10) が binary(10) へ変換された
  • TEXT が blob へ変換された

一方、ENUM型のカラム「Field」は変換されず、宣言時の定義(enum('ENG','SS'))がそのまま保たれています。この挙動を理解しておくことで、バイナリデータを扱うテーブル設計の際に意図しない型変換を防ぐことができます。

  1. MySQLで数値文字列に比較演算子を使用する方法をわかりやすく解説

    MySQLで数値文字列を比較するには?MySQLでは、「5-9」や「2-4」のようなハイフン区切りの数値文字列をそのまま比較することはできません。そんなときは、substring()関数とinstr()関数、さらにCASTを組み合わせることで、文字列から数値部分を取り出して比較演算子を使えるようになります。この記事では、実際にテーブルを作成しながら、数値文字列に対して比較演算を行う方法を順番に解説していきます。1. サンプルテーブルを作成するまずは、ユーザーIDと教育期間のギャップ(数値文字列)を格納するテーブルを作成しましょう。mysql> create table DemoTable

  2. MySQLプログラムでオプションを指定する3つの方法と優先順位を解説

    MySQLの各種プログラムでは、動作をカスタマイズするためにさまざまなオプションを指定できます。本記事では、MySQLプログラムにオプションを指定する主な方法と、それぞれの特徴・優先順位について詳しく解説します。1. コマンドラインで指定するプログラム名を入力した後に、コマンドライン上へ直接オプションを並べて指定する方法です。この方法は、その実行時にのみ適用したい一時的なオプションを指定する場合に最も一般的に使われます。2. オプションファイルで指定するプログラムが起動時に読み込むオプションファイル(my.cnf や my.ini など)にオプションを記述しておく方法です。毎回プログラムを実行