【问题标题】: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::statementDB::unpreparedDB::raw,但 Laravel 迁移抛出错误:

[照亮\数据库\查询异常] SQLSTATE [42000]:语法错误或访问冲突:1064 你有一个错误哟 你的 SQL 语法;检查与您的 MySQL 服务器版本相对应的手册 f 或在 'DELIMITER // 附近使用的正确语法 创建函数 `LEVENSHTEIN`(s1 VARCHAR(255) CHARACTER SET utf8, ' 在第 1 行

HeidiSQL 执行的时候就可以了,请问是什么问题?

【问题讨论】:

    标签: mysql sql laravel levenshtein-distance


    【解决方案1】:

    我在@peterm 回答的Creating MYSQL Procedure in Laravel 4 Migrations 找到了解决方案。

    DELIMITER // 中的问题不是有效的 sql 语句。这只是一个 MySql 客户端命令。

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2013-07-14
      • 2018-09-22
      • 2017-07-20
      • 2019-11-14
      • 2018-06-05
      • 2015-05-01
      • 2014-06-10
      相关资源
      最近更新 更多