gpt4 book ai didi

mysql - 如何更改所有已创建列的默认字符串长度 (varchar)?

转载 作者:可可西里 更新时间:2023-11-01 07:49:37 25 4
gpt4 key购买 nike

当您在 Rails 中创建迁移并指定字符串时,默认情况下,列长度为 255。有没有办法将创建的所有未指定长度的列设置为默认为其他数字?

一般来说 255 没问题,但在我的情况下,我需要将字符串列的编码切换为 utf8mb4,当我这样做时,索引会中断,因为索引不能超过 767 字节:

Mysql2::错误:指定的键太长;最大 key 长度为 767 字节

因为 utf8 存储为 3 个字节,所以 3 * 255 = 765,但是 utf8mb4 是 4 个字节,所以 4 * 255 = 1020,这将失败。

因此,一旦我将 database.yml 更改为使用 utf8mb4 编码,当我重新加载模式时,当他们尝试加载索引时,事情就会失败。

最佳答案

可以强制 Rails 为 varchar 列使用 191 的长度。首先,创建一个初始化程序,您将在其中覆盖默认的 varchar 长度。我在 config/initializers/schema_string_limit.rb 中创建了我的:

ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::NATIVE_DATABASE_TYPES[:string] = {
name: 'varchar',
limit: 191
}

现在重新创建您的数据库并运行所有迁移:

rake db:drop
rake db:create
rake db:migrate

确保使用 rake db:migrate 而不是 rake db:schema:load。我们需要强制 Rails 再次运行所有迁移,因为现有的 schema.rb 已经反射(reflect)了 255 大小。使用新默认值完成迁移后,您将拥有一个新的 schema.rb,它使用 191 的长度,因此您可以从那时起简单地加载架构。

关于mysql - 如何更改所有已创建列的默认字符串长度 (varchar)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29684532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com