mysql – 如何更改所有已创建列的默认字符串长度(varchar)?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 如何更改所有已创建列的默认字符串长度(varchar)?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1037字,纯文字阅读大概需要2分钟。
内容图文
![mysql – 如何更改所有已创建列的默认字符串长度(varchar)?](/upload/InfoBanner/zyjiaocheng/898/89f898486d5d46a691ed691d892de767.jpg)
在rails中创建迁移并指定字符串时,列长度默认为255.有没有办法设置所有创建的未指定长度的列,默认为其他数字?
一般来说255很好,但在我的情况下,我需要将字符串列上的编码切换到utf8mb4,当我这样做时索引中断,因为索引不能超过767字节:
Mysql2 ::错误:指定的密钥太长;最大密钥长度为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已经反映了255的大小.一旦您使用新的默认值运行迁移,您将拥有一个使用长度为191的新schema.rb,这样您就可以从那时起简单地加载模式.
内容总结
以上是互联网集市为您收集整理的mysql – 如何更改所有已创建列的默认字符串长度(varchar)?全部内容,希望文章能够帮你解决mysql – 如何更改所有已创建列的默认字符串长度(varchar)?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。