Abh*_*bhi 4 mysql migration ruby-on-rails
我正在关注这篇文章并尝试通过 Rails 迁移添加levenshtein mysql 函数,如下所示:
class AddLevenshteinFunctionToMysql < ActiveRecord::Migration
def self.up
ActiveRecord::Base.connection.execute <<-SQL
DELIMITER $$
CREATE FUNCTION levenshtein( s1 VARCHAR(255), s2 VARCHAR(255) )
RETURNS INT
DETERMINISTIC
.
.
.
SQL
end
def self.down
ActiveRecord::Base.connection.execute <<-SQL
DROP FUNCTION levenshtein;
SQL
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我收到如下错误:
Mysql2::Error: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'DELIMITER $$ 附近使用的正确语法
当我直接在 MySQL 控制台中尝试时,确切的代码运行良好。但我想通过 Rails 迁移添加它。怎么了?
编辑
如果删除 DELIMITER,则会出现以下错误(第 39 行是 END$$)
Mysql2::Error: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 39 行附近使用的正确语法
编辑
我得到了一个很好的答案,解释了错误的原因,但不是修复。回答
Rails 无法执行 DELIMITER,因为它是 MYSQL 命令。
ActiveRecord 设置了一个不同的语句结束标志(不是分号),所以你可以直接写 sql,去掉DELIMITTER和$$
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |