こんにちわanです。
かなりご無沙汰な投稿となってしまいました。
実は別でブログをはじめてそこに注力していました。
で、結局楽なので新しいブログもはてなブログですが、
エンジニアとしてそれってどうなの?と思った次第です。
それでは本題へ。
Contents
MySQL × Rails で長い文字列を保存したい
はてなをやめて独自に作る or WordPressに移行するなら、DB管理もしないといけません。そう思うと次の疑問が浮かびました。
- 記事ってどんな形式で保存するんだろ?
- 長い文字列だからTEXT?
- それでも危ういんじゃない?
とあんの頭の中では”???”が。なので気になって調べたのでその備忘録です。
Railsでテーブルを作る
rails g コマンドを使用します。
以前まとめているのでこちらの記事を参考に。
MySQLにあるデータ型
MySQLには以下の文字列型が存在するようだ。
データ型 | 解説 |
---|---|
CHAR | 255Bまでの固定長文字列 |
VARCHAR | 64KBまでの可変長文字列 |
TINYTEXT | 255Bまでの可変長文字列 |
TEXT | 64KBまでの可変長文字列 |
MEDIUMTEXT | 1.6MBまでの可変長文字列 |
LONGTEXT | 4.3GBまでの可変長文字列 |
ほうほう、
LONGTEXT
なるものにすれば間違いなく問題なし。
1記事4.3GBとか不可能ですからね。
ただRailsでこんなの指定できんの?見たことないっぺ。
Railsで長い文字列データ型を作成する
Rails で長い文字列カラムを作る方法を説明します。
とりあえずテーブル作る
1 2 |
rails g model モデル名 カラム名:データ型 |
こんな感じです。ちなみにRailsで指定できるデータ型は以下。
- string : 文字列
- text : 長い文字列
- integer : 整数
- float : 浮動小数
- decimal : 精度の高い小数
- datetime : 日時
- timestamp : タイムスタンプ
- time : 時間
- date : 日付
- binary : バイナリデータ
- boolean : Boolean
あら?あらららら?
LONGTEXTとか指定できないっぺよ!!
と一見なる。
だから私も見たことがないと思ったわけだ。
とりあえず長い文字列なので”text型”でカラムを作りましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
rails g model test test_column:text # 出来上がったmigrationファイルをみてみよう # db/migration/2018060100000_create_tests.rb class CreateTests < ActiveRecord::Migration def change create_table :tests do |t| t.text :test_column t.timestamps null: false end end end |
この状態で動かすとこんな感じ。”test_column”には64kbの文字列が入れれます。
TEXT型をLONGTEXT型に変える
方法はなんとリミットを付けるだけです。これは驚いた。と、言いたいところですがBooleanとかと仕組みは一緒だったんですよね。
1 2 3 4 5 6 7 8 9 10 |
# db/migration/2018060100000_create_tests.rb class CreateTests < ActiveRecord::Migration def change create_table :tests do |t| t.text :test_column, limit: 4294967295 t.timestamps null: false end end end |
これでmigrateすると…、
WOW!!FANTASTIC!!
でLONGTEXTに代わりましたとさ。
ちなみに4294967295と言う数字は
4294967295バイト(4.3GB)でLONGTEXT型の上限です。
このようにリミットに指定したバイト数でRailsがよしなにデータ型を変えてくれる。
Railsで指定したテキスト型カラムのリミット数とデータ型の対応表
リミットバイト数と対応するデータ型は以下です。
データ型 | Limitバイト数 |
---|---|
TINYTEXT | 1 ~ 255 |
TEXT | 指定なし or 256 ~ 65535 |
MEDIUMTEXT | 65536 ~ 16777215 |
LONGTEXT | 16777216 ~ 4294967295 |
まとめ
なるほどでした。
こんな感じにタグごと保存して記事をhtmlで表示すればブログに活用できちゃうんですね。いや、勉強になりました。