2016-08-15 2 views
0

私はRails 5とMySQL 5.7を使用しています。私は私のdatabase.ymlの中で、次のしている:テーブルのエンコードが間違っているのはなぜですか?

default: &default 
    adapter: mysql2 
    pool: 5 
    encoding: utf8mb4 
    charset: utf8mb4 
    collation: utf8mb4_unicode_ci 
    socket: /tmp/mysql.sock 

development: 
    <<: *default 
    database: [...] 
    username: [...] 
    password: [...] 

は、私は私のデータベースを再作成するrake db:resetを実行して、私はshow create table usersを実行し、私はCREATE TABLEユーザー([...]) ENGINE=InnoDB DEFAULT CHARSET=utf8を参照してください。

なぜ私はCHARSET=utf8で、どうすれば修正できますか(それをutf8mb4と同じにします)?ありがとう。あなたがテーブルを作成するときに

答えて

0

rake db:resetが間違っています。 rake db:drop && rake db:create && rake db:migrateが正しいです。

resetは、間違った文字セットと照合順序を持つ既に格納されているスキーマからテーブルを作成しました。しかし、移行からそれらを再作成すると、新しい文字セットと照合で作成されました。

0

は明示して:

CREATE TABLE users (
     name VARCHAR(99) CHARACTER SET utf8mb4 NOT NULL, 
     ... 
    ) ENGINE=InnoDB; 

おそらく何が起こったことは、あなたということです:

CREATE TABLE users (
     name VARCHAR(99) NOT NULL, 
     ... 
    ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4; 

別の技術は、テーブルのデフォルトを無視し、各列の明示的なことですどちらの場所にも文字セットは指定されていませんが、データベースDEFAULTはutf8でした。

+0

実際には、データベースのデフォルトはutf8mb4です。 '| character_set_database | utf8mb4'しかし、Railsはこれを尊重していません。これはRailsの質問です。私は毎回明示することができますが、私はしたくありません。 –

+0

Railsはテーブルを作成しますか? (私はRoRを知らない) –

+0

あなたが通常のワークフローを使用するならば、それはあなたのためのテーブルを作成します。詳細は以下の私の答えを見てください。 –

関連する問題