Tag: MySQL/utf8mb4

目次

関連ページ

参考情報

概要

設定

Railsのキーの767バイト制限の回避

  • utf8だと1文字3バイトだけど、utf8mb4だと4バイトなので、主キーの制限767バイトを超えてしまうことがある。
  • 以下のようなエラーが表示される。
    ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
  • この制限を回避するためにはmysqlの設定を変更し、さらにRailsに特定のイニシャライザーを追加する必要がある。

my.cnfの変更

  • これを回避する設定をmy.cnfに追加する(か、制限を超えないようテーブル定義を変更することもできる)。Rails を utf8mb4 で動かす | してみんとてす
    innodb_file_per_table = 1  # 5.6.6
    innodb_file_format = Barracuda 
    innodb_large_prefix  =1
    innodb_default_row_format = DYNAMIC # >= 5.7.9
    
  • 終わったら再起動

config/initializers/ar_innodb_row_format.rbを追加。

  • Rails/絵文字を扱う?を参考のこと。
  • migrationでtableを作成する場合に影響する。

既存テーブル設定の変更

  • さらにテーブルごとのROW_FORMATを変更する必要がある。
    SELECT row_format from information_schema.tables where table_schema='データベース名';
    ALTER TABLE テーブル名 ROW_FORMAT=DYNAMIC;
    ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4;

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-02-11 (月) 17:41:20 (67d)