Ich versuche, die folgende Migration zu tun:Ecto die Schaffung eindeutiger Index ist fehlgeschlagen für Mysql/MariaDB
defmodule Shopper.Repo.Migrations.MakeNameUniqueShopper do
use Ecto.Migration
def change do
create unique_index :shoppers, [:name]
end
end
versuchte auch create unique_index :shoppers, [:name], name: :name_unique
, create unique_index :shoppers, [:name], name: "name_unique"
und create index(:shoppers, [:name], unique: true)
Aber sie scheiterten mit ähnlichen Fehler:
[info] == Running Shopper.Repo.Migrations.MakeNameUniqueShopper.change/0 forward
[info] create index shoppers_name_index
** (Mariaex.Error) (1071): Specified key was too long; max key length is 767 bytes
(ecto) lib/ecto/adapters/sql.ex:172: Ecto.Adapters.SQL.query!/5
(elixir) lib/enum.ex:1261: Enum."-reduce/3-lists^foldl/2-0-"/3
...
...
Jede Hilfe wäre sehr geschätzt, um mir mit dem Fehler zu helfen.
Hinweis: Ich verwende ecto 1.02
Es folgt die erste Migration erstellt mit mix phoenix.gen.model
defmodule Shopper.Repo.Migrations.CreateV1.Shopper do
use Ecto.Migration
def change do
create table(:shoppers) do
add :name, :string
add :oauth_token, :string
timestamps
end
end
end
Info: das name
Feld utf8mb4 ist, spezifiziert durch mein Schema
Update: Ich weiß, die Lösung ist diezu reduzierenFeldlänge, aber wie funktioniert es mit Phoenix-Modell und Migration? Wie es eine Schnur erwartet?
Bitte stellen Sie 'SHOW CREATE TABLE' bereit, damit wir die Besonderheiten besprechen können. –
@RickJames Ich bin mir nicht sicher, ob es hier relevant ist. Es ist erstellt von 'Mix phoenix.gen.model' – ardhitama
Wie können wir die Felder, die es im Schlüssel verwendet, ohne die Struktur der Tabelle zu sehen? Darum bittet @RickJames (wenn ich das richtig verstehe). –