メインコンテンツへスキップ

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
MySQL の MAC アドレスは、通常 VARCHAR(17) として保存されています。保存はできますが、どんな文字列でも受け入れ、何も正規化せず、6 バイトで済むところに 17 バイトを使います。VillageSQL の MACADDR 型は、挿入時に形式を検証し、一貫した表現に正規化し、OUI の抽出を追加の手間なく提供します。

MySQL のデフォルト: VARCHAR(17)

どちらの行も挿入されます。これで同じ列に、同じベンダープレフィックスの 2 つの表現が存在します。重複排除のクエリは文字列正規化の問題になります。列が実際に有効な MAC アドレスを保持しているという保証はありません。

標準的な回避策: BINARY(6)

コンパクトな保存です。挿入時にバイナリに変換し、読み取り時に文字列に戻します。
これが手作業での再構築です。動作はしますが、冗長で壊れやすく、それでも入力を検証しません。

VillageSQL の場合: MACADDR と MACADDR8

VillageSQL の vsql_network_address 拡張機能は、自動的な形式の正規化と検証を備えた MACADDR(6 バイトの IEEE 802 形式)型と MACADDR8(8 バイトの EUI-64 形式)型を追加します。
出力:

OUI の抽出

MAC アドレスの最初の 3 バイトは製造元を識別します(OUI — Organizationally Unique Identifier)。macaddr_trunc() は最後の 3 バイトをゼロにし、OUI だけを残します。

比較とソート

EUI-64 MAC アドレス(MACADDR8)

最近のハードウェアでは、8 バイトの EUI-64 識別子の使用が増えています。MACADDR8 型がこれを扱います。

アプローチの比較

よくある質問

MACADDR は大文字の 16 進数を受け入れますか?

はい。08:00:2B:01:02:03 と 08:00:2b:01:02:03 はどちらも正しく解析され、同一の値として保存されます。

MACADDR を主キーとして使えますか?

はい。MACADDR はインデックス作成と等価比較をサポートします。MAC が自然な識別子となるネットワークデバイスのテーブルでは、妥当な主キーです。

MACADDR と MACADDR8 の違いは何ですか?

MACADDR は、ほとんどのネットワークハードウェアで使われる 6 バイトの IEEE 802 MAC-48 形式です。MACADDR8 は、一部の最近のネットワークインターフェイスや IPv6 リンクローカルアドレスの生成で使われる 8 バイトの EUI-64 形式です。EUI-64 識別子を保存する場合は MACADDR8 を使ってください。

MACADDR と MACADDR8 の間で変換するには?

組み込みの変換関数はありません。MAC-48 を EUI-64 に拡張する(中央に ff:fe を挿入する)必要がある場合は、macaddr8_from_string() を呼び出す前にアプリケーションコードで行ってください。

トラブルシューティング

関連項目