dan*_*aze 6 mysql ruby-on-rails
快速问题:如何在使用rails创建模型时为特定列指定排序规则?
我没有在rails API文档中找到任何选项,但我认为明确声明某些属性的排序规则非常重要.
假设默认排序规则是utf8_unicode_ci.但是在创建用户模型时,密码字段的归类应该是utf8_bin.
所以,当像这样使用rails时
rails g model Users username:string password:string
Run Code Online (Sandbox Code Playgroud)
您无法指定使用utf8_bin排序规则的密码.
有办法吗?
编辑: 生成的SQL应该是这样的:
CREATE TABLE `user` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique ID',
`username` VARCHAR(32) NOT NULL COMMENT 'Nick/username',
`password` VARCHAR(32) COLLATE utf8mb4_bin COMMENT 'Encoded password',
PRIMARY KEY(`id`),
INDEX(`username`)
);
Run Code Online (Sandbox Code Playgroud)
如果您不能通过命令直接执行此操作我不在乎您必须修改该db/timestamp_create_users.rb文件.但重点是能够使用rails迁移.
遗憾的是,rails似乎没有提供任何高级方法来设置列级排序规则,因此您必须至少回退到SQL.我是这样做的:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :password
end
reversible do |dir|
dir.up {
change_column :users, :password, "VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin"
}
end
end
end
Run Code Online (Sandbox Code Playgroud)
该reversible块仅用于启用回滚,因为rails不知道如何在change_column没有原始值的情况下还原.
然后你可以检查mysql cli上的排序规则:
SHOW TABLE STATUS;
Run Code Online (Sandbox Code Playgroud)
你应该在那里看到你的默认排序规则 - 可能是utf8_unicode_ci.然后做:
SHOW FULL COLUMNS FROM users;
Run Code Online (Sandbox Code Playgroud)
你应该在密码字段看到utf8_bin.
| 归档时间: |
|
| 查看次数: |
5549 次 |
| 最近记录: |