JSON文字列をVARCHARおよびTEXTカラムに変換する

JSON文字列値がSQL VARCHAR、TEXT、CHARなどの文字列カラム型にどのようにマッピングされるかを学びます。長さの推定、エンコーディング、ベストプラクティスを解説。

Basic Tables

詳細な説明

文字列型のマッピング

JSON文字列は最も一般的な値の型ですが、SQLは異なる制約とパフォーマンス特性を持つ複数の文字列型を提供します。

デフォルトのマッピング

{
  "name": "Alice Johnson",
  "email": "alice@example.com",
  "bio": "Full-stack developer with 10 years of experience building web applications, APIs, and distributed systems.",
  "country_code": "US",
  "uuid": "550e8400-e29b-41d4-a716-446655440000"
}
CREATE TABLE profiles (
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  bio TEXT NOT NULL,
  country_code CHAR(2) NOT NULL,
  uuid CHAR(36) NOT NULL
);

適切な文字列型の選択

SQL型 使用場面
CHAR(n) 固定長:国コード、UUID、ハッシュダイジェスト
VARCHAR(n) 既知の最大長を持つ可変長:名前、メール、URL
TEXT 無制限:説明、コメント、Markdownコンテンツ

長さの推定

コンバーターはサンプル値を分析して長さを推定します:

  1. 短い固定パターン(2-36文字) — すべてのサンプルが同じ長さの場合、CHAR(n)を使用。
  2. 中程度の文字列(最大約255文字) — 安全なデフォルトとしてVARCHAR(255)を使用。
  3. 長い文字列(255文字超または可変) — TEXTを使用。

ツールのオプションでデフォルトのVARCHAR長をオーバーライドできます。

スマート検出

コンバーターはカラム名と値の一般的なパターンを認識します:

  • emailVARCHAR(320)(RFC 5321の最大値)
  • urlhreflinkVARCHAR(2048)
  • phoneVARCHAR(20)
  • country_codeCHAR(2)
  • uuidguidCHAR(36) または UUID(PostgreSQL)

エンコーディングの考慮事項

絵文字と国際文字をサポートするため、常にUTF-8(MySQLではutf8mb4)を使用してください。コンバーターはサンプル値に非ASCII文字を検出した場合、コメントを追加します。

インデックスへの影響

TEXTカラムはMySQLでは直接インデックスを作成できません(プレフィックスインデックスが必要)。文字列カラムでフィルタやソートを行う予定がある場合は、明示的な長さを持つVARCHARを使用してください。

ユースケース

短いコード、中程度の長さの名前、長文テキストフィールドが混在するAPIレスポンスデータを変換し、各カラムに最適なSQL文字列型を使用する必要がある場合に使用します。

試してみる — JSON to SQL Schema

フルツールを開く