MySQL テーブルに GUID を格納する方法:初心者向けガイド
MySQL テーブルに GUID を格納する方法
GUID (Globally Unique Identifier) は、128 ビットの値で構成されるユニークな識別子です。UUID (Universally Unique Identifier) とも呼ばれます。データベースのレコードを一意に識別するために使用されます。
MySQL テーブルに GUID を格納するには、いくつかの方法があります。
方法
- CHAR(36) 型
CREATE TABLE my_table (
id CHAR(36) PRIMARY KEY,
...
);
この方法は、最も単純な方法です。CHAR(36) 型は、36 文字までの文字列を格納できます。GUID は 32 文字の 16 進数文字列なので、CHAR(36) 型で十分な長さです。
- BINARY(16) 型
CREATE TABLE my_table (
id BINARY(16) PRIMARY KEY,
...
);
この方法は、CHAR(36) 型よりも効率的です。BINARY(16) 型は、16 バイトのバイナリデータを格納できます。GUID は 16 バイトのバイナリデータなので、BINARY(16) 型で格納すると、ストレージスペースを節約できます。
- UUID 型
CREATE TABLE my_table (
id UUID PRIMARY KEY,
...
);
MySQL 8.0 以降では、UUID 型を使用できます。UUID 型は、GUID を格納するために特別に設計されたデータ型です。
- 互換性: 古いバージョンの MySQL との互換性が必要な場合は、CHAR(36) 型を使用する必要があります。
- 効率性: ストレージスペースを節約したい場合は、BINARY(16) 型を使用する必要があります。
- 使いやすさ: 使いやすさを重視する場合は、UUID 型を使用する必要があります。
パフォーマンス
GUID を格納する方法は、パフォーマンスにも影響します。
- CHAR(36) 型は、BINARY(16) 型よりも読み書きが遅くなります。
- UUID 型は、CHAR(36) 型と BINARY(16) 型の中間の速度で読み書きされます。
MySQL テーブルに GUID を格納するには、いくつかの方法があります。どの方法を選択するかは、要件とパフォーマンスのバランスによって異なります。
補足
- GUID は、データベースのレコードを一意に識別するために使用されます。
- どの方法を選択するかは、要件とパフォーマンスのバランスによって異なります。
CREATE TABLE users (
id CHAR(36) PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (id, username, email)
VALUES (UUID(), 'johndoe', '[email protected]');
SELECT * FROM users WHERE id = 'your-guid-here';
id
列は、CHAR(36) 型の PRIMARY KEY です。username
列は、最大 255 文字の文字列を格納できます。created_at
列は、レコードが作成された日時を格納します。
INSERT INTO
ステートメントは、users
テーブルに新しいレコードを挿入します。
id
列には、UUID() 関数を使用して生成された GUID が挿入されます。username
列には、johndoe
という値が挿入されます。email
列には、[email protected]
という値が挿入されます。
SELECT
ステートメントは、users
テーブルから id
列が your-guid-here
という値と一致するレコードを検索します。
上記のサンプルコードは、GUID を格納する最も基本的な方法を示しています。
- BINARY(16) 型を使用して GUID を格納するには、
CHAR(36)
型をBINARY(16)
型に置き換えます。
GUID を MySQL テーブルに格納する他の方法
uuid_to_bin() 関数と bin_to_uuid() 関数を使用する
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (id, username, email)
VALUES (uuid_to_bin('your-guid-here'), 'johndoe', '[email protected]');
SELECT * FROM users WHERE id = bin_to_uuid('your-guid-here');
uuid_to_bin()
関数は、128 ビットの GUID を 16 バイトのバイナリデータに変換します。bin_to_uuid()
関数は、16 バイトのバイナリデータを 128 ビットの GUID に変換します。
UNHEX() 関数と HEX() 関数を使用する
CREATE TABLE users (
id CHAR(36) PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (id, username, email)
VALUES (UNHEX('your-guid-here'), 'johndoe', '[email protected]');
SELECT * FROM users WHERE id = HEX('your-guid-here');
UNHEX()
関数は、16 進数文字列をバイナリデータに変換します。HEX()
関数は、バイナリデータを 16 進数文字列に変換します。
NEWID() 関数を使用する (Windows のみ)
CREATE TABLE users (
id CHAR(36) PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (id, username, email)
VALUES (NEWID(), 'johndoe', '[email protected]');
SELECT * FROM users WHERE id = NEWID();
NEWID()
関数は、Windows プラットフォームでのみ使用できます。NEWID()
関数は、ランダムな GUID を生成します。
- パフォーマンスが最も重要である場合は、
BINARY(16)
型とuuid_to_bin()
関数 /bin_to_uuid()
関数を使用する必要があります。 - 互換性が最も重要である場合は、
CHAR(36)
型とUNHEX()
関数 /HEX()
関数を使用する必要があります。
mysql guid uuid