ard*_*ama 5 mysql elixir mariadb ecto
我尝试执行以下迁移:
defmodule Shopper.Repo.Migrations.MakeNameUniqueShopper do
use Ecto.Migration
def change do
create unique_index :shoppers, [:name]
end
end
Run Code Online (Sandbox Code Playgroud)
也试过create unique_index :shoppers, [:name], name: :name_unique
,create unique_index :shoppers, [:name], name: "name_unique"
和create index(:shoppers, [:name], unique: true)
但他们失败了类似的错误:
[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
...
...
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感谢,以帮助我解决错误.
注意:我正在使用ecto 1.02
以下是第一次创建的迁移 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
Run Code Online (Sandbox Code Playgroud)
信息:该name
字段是utf8mb4,由我的架构指定
更新:我知道解决方案是减少name
字段长度,但如何使它与凤凰模型和迁移一起使用?因为它需要一个字符串?
感谢 Jos\xc3\xa9 Valim 帮助我完成他的答案,尽管这个答案是我的问题的确切解决方案。
\n\n使用以下代码创建新的 ecto 迁移脚本:
\n\ndefmodule Shopper.Repo.Migrations.MakeNameUniqueShopper do\n use Ecto.Migration\n\n def change do\n alter table(:shoppers) do\n modify :name, :string, size: 100\n end\n\n create unique_index :shoppers, [:name], name: :shopper_name_unique\n end\nend\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
1833 次 |
最近记录: |