【问题标题】:Laravel migration raw sql errorLaravel迁移原始sql错误
【发布时间】:2015-02-09 17:43:42
【问题描述】:
我想在 Laravel 中使用 Levenshtein 距离进行搜索。我找到了SQL函数(另存为app/database/migrations/levenshtain.sql):
分隔符 //
创建函数 `LEVENSHTEIN`(s1 VARCHAR(255) 字符集 utf8,s2 VARCHAR(255) 字符集 utf8) 返回 int(11)
确定性
开始
声明 s1_len、s2_len、i、j、c、c_temp、成本 INT;
声明 s1_char CHAR 字符集 utf8;
-- 此函数的 max strlen=255
声明 cv0, cv1 VARBINARY(256);
SET s1_len = CHAR_LENGTH(s1),
s2_len = CHAR_LENGTH(s2),
cv1 = 0x00,
j = 1,
我 = 1,
c = 0;
如果 (s1 = s2) 那么
返回(0);
ELSEIF (s1_len = 0) 那么
返回(s2_len);
ELSEIF (s2_len = 0) 那么
返回(s1_len);
万一;
而 (j c_temp) 那么
设置 c = c_temp;
万一;
SET c_temp = ORD(SUBSTRING(cv1, j+1, 1)) + 1;
如果 (c > c_temp) 那么
设置 c = c_temp;
万一;
SET cv0 = CONCAT(cv0, CHAR(c)),
j = j + 1;
结束;
设置 cv1 = cv0,
我 = 我 + 1;
结束;
返回(c);
结尾//
分隔符;
在迁移中:
公共功能向上(){
DB::statement(file_get_contents(__DIR__.'/levenshtein.sql'));
}
公共功能向下(){
DB::statement('DROP FUNCTION `LEVENSHTEIN`;');
}
我尝试了DB::statement、DB::unprepared 和DB::raw,但 Laravel 迁移抛出错误:
[照亮\数据库\查询异常]
SQLSTATE [42000]:语法错误或访问冲突:1064 你有一个错误哟
你的 SQL 语法;检查与您的 MySQL 服务器版本相对应的手册 f
或在 'DELIMITER // 附近使用的正确语法
创建函数 `LEVENSHTEIN`(s1 VARCHAR(255) CHARACTER SET utf8, ' 在第 1 行
HeidiSQL 执行的时候就可以了,请问是什么问题?
【问题讨论】:
标签:
mysql
sql
laravel
levenshtein-distance