我想用来String.hash
生成哈希码,但我担心如果一段时间后我将版本从1.8升级到1.9,生成的哈希码也会改变.
Ruby 1.8和1.9是否具有相同的字符串哈希码?
我正在使用Rails 3.2.6和Mysql 6.0.9(但我在MySQL 5.2.25上有完全相同的错误)
当我创建新的数据库(rake db:create
)然后当我尝试加载模式(rake schema:load
)时,我收到此错误:
Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `unique_schema_migrations` ON `schema_migrations` (`version`)
Run Code Online (Sandbox Code Playgroud)
经过几个小时的研究,我找到了以下解决方案:
这没用.我在我的Linux服务器,我的Mac甚至Windows上试过它 - 它只是不起作用.
我不需要version
列长为255(当它是UTF-8时,它需要4*255 = 1020字节并且超过了密钥的767字节的MySQL限制).我也不需要它是UTF-8,但DB中的所有其他表都是UTF-8,我已将utf8_czech_ci设置为默认排序规则.
实际创建schema_migrations表的方法如下所示:
def self.create_table
unless connection.table_exists?(table_name)
connection.create_table(table_name, :id => false) do |t|
t.column :version, :string, :null => false
end
connection.add_index table_name, :version, :unique => true, :name => index_name
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在Github rails/rails上读取整个文件
所以我试着添加:limit …