我想将表列长度 255 迁移到 191,以将字符集从 utf8 更改为 utf8mb4。
Rails 迁移如下。
def self.up
change_column :friend_user_lists, :comment, :string, :limit => 191
end
我已经将数据库、表和列的字符集更改为 utf8mb4,但出现以下错误。
Mysql::Error: Data truncated for column 'comment' at row 118: ALTER TABLE `friend_user_lists` CHANGE `comment` `comment` varchar(191) DEFAULT NULL
我猜错误表明存在太多长值。
那怎么迁移呢?
最佳答案
如果您可以截断现有的评论记录,那么我会在迁移中这样做:
def self.up
FriendUserList.where('LENGTH(comment) > 191').each { |r| r.update(comment: r.comment[0...191]) }
change_column :friend_user_lists, :comment, :string, :limit => 191
end
关于mysql - 如何通过 Rails 迁移减少存在值的 MySQL 列的 varchar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41570682/