1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

strapiのDB上でのデータ型調べてみた

こんにちは。株式会社dottの山上です。
Strapi Advent Calenderも佳境に入ってきた21日目の本日は、strapiのデータ型がDB上でどう表現されるのか調べてみたので、書いて行きたいと思います。

Strapi Advent Calenderのその他の記事はこちら

strapiのデータ型

strapiでは、以下のようなデータ型が用意されています。
スクリーンショット 2020-12-21 21.20.14.png

それぞれのDB上の型定義と比較しながら見ていきたいと思います。
(ただし、今回はRelation, Component, DynamicZoneについては自分の理解度も足りてないので一旦割愛します。)

Text

text型はshort textとlong textが選択できます。
スクリーンショット 2020-12-21 21.22.30.png

Email

フィールド名以外、特に選択する項目はありません。
スクリーンショット 2020-12-21 21.40.06.png

RichText

フィールド名以外、特に選択する項目はありません。
スクリーンショット 2020-12-21 21.42.07.png

Password

フィールド名以外、特に選択する項目はありません。
スクリーンショット 2020-12-21 21.42.40.png

Number

number型はinteger, big integer, decimal, floatから選択可能です。
スクリーンショット 2020-12-21 21.43.38.png

Enum

enum型はenumの要素を定義できるボックスが用意されていました。
スクリーンショット 2020-12-21 21.44.45.png

Date

date型はdate, datetime, timeから選択可能です。
スクリーンショット 2020-12-21 21.45.56.png

Media

media型は複数の項目と単品の項目が選択可能です。
スクリーンショット 2020-12-21 21.46.47.png

Boolean

フィールド名以外、特に選択する項目はありません。
スクリーンショット 2020-12-21 21.48.22.png

JSON

フィールド名以外、特に選択する項目はありません。
スクリーンショット 2020-12-21 21.49.07.png

UID

uid型はattached typeがnone, shortText, longTextと選択可能でした。
スクリーンショット 2020-12-21 21.50.28.png

とりあえず全部作ってみた

ローカルのDBはSQLiteで作成されるので、Postgresqlなどで動かすとまた結果が変わるかもしれませんが、とりあえず上記の項目毎に1つずつフィールドを作ってローカルのDBを確認してみました。
(relational_modelは前回の記事作成時にそのままになってるrelationの項目です。)

スクリーンショット 2020-12-21 21.52.38.png

結果は以下の通り。

  • varchar(255)(=文字数制限ありの文字列)
    • email
    • text型のshorttext
    • password
    • enum
    • UID型のattached field=none
    • UID型のattached field=shorttext
    • UID型のattached field=longtext
  • text(=文字数制限なしの文字列)
    • text型のlongtext
    • richtext
    • json
  • integer
    • number型のinteger
  • bigint
    • number型のbig integer
  • float
    • number型のdecimal
    • number型のfloat
  • date
    • date型のdate
  • datetime
    • date型のdatetime
  • time
    • date型のtime
  • boolean
    • boolean

データ型については以下も参照してみてください。
・・・自分でも読んでみたけど、SQLiteのデータ型がすごい種類少ない?
SQLite
Postgresql

DB上の型は同じだけどstrapi上で定義が別れているものの違い

strapi上で定義が別れているものは、管理画面側のUIで違いが出てるっぽいです。

email

emailの形にしないとバリデーションでエラーにしてくれます。
スクリーンショット 2020-12-21 22.21.29.png

longtext, richtext

longtextが単純なテキストボックスなのに対し、richtextはmarkdown形式で色々と装飾ができるようになっています。
スクリーンショット 2020-12-21 22.19.08.png

password

目のアイコンをクリックでパスワードの表示非表示を切り替えられるようになっています。
スクリーンショット 2020-12-21 22.26.03.png

integer

右の上下矢印で1ずつ増減できるようになっています。
スクリーンショット 2020-12-21 22.27.10.png

decimal, float

こちらは0.1ずつ増減できるようになっています。
スクリーンショット 2020-12-21 22.28.19.png

enum

定義時の要素が一覧で選択できるようになっています。
スクリーンショット 2020-12-21 22.29.04.png

datetime, date, time

それぞれ、日付と時間が選択できるようになっています。
スクリーンショット 2020-12-21 22.30.53.png
スクリーンショット 2020-12-21 22.30.59.png
スクリーンショット 2020-12-21 22.31.05.png

media

見た目一緒なのですが、クリックした後の挙動が違います。
multiの場合は画像の選択時に複数同時に選択できるようになっています。
スクリーンショット 2020-12-21 22.34.14.png

boolean

分かりやすいです。
スクリーンショット 2020-12-21 22.37.02.png

JSON

ちゃんとJSONフォーマットで入れないとエラーにしてくれます。
スクリーンショット 2020-12-21 22.37.50.png

UID

UIDを自動生成してくれる様子・・・?仕組みがよくわかってないですorz
スクリーンショット 2020-12-21 22.39.33.png

まとめ

  • strapiにはデフォルトで様々なパターンに対応できるデータ型が用意されている
  • strapiでの定義が違っても、DB上でのデータ型は同じ、と言う型がいくつかあった
  • strapiでの定義が違う型は、管理画面のUIがそのデータ型に合わせて表示される
  • 上記の違いを理解して、上手いこと使い分けていきましょう

今回は以上になります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?