用函数创建mysql视图

时间:2016-02-29 07:02:08

标签: mysql sql database

我创建了以下函数,以便在mysql视图中使用它。但是当我运行视图查询时显示错误"非法混合排序(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)进行操作 &#34 ;.但我将函数varchar更改为int。它工作正常。请帮帮我

CREATE FUNCTION `book_subject`() RETURNS varchar(10) CHARSET utf8
RETURN @subject

CREATE 
VIEW `qry_tools` AS
SELECT 
    `companyID`.`companyID` AS `companyID`
FROM companymaster
WHERE
    ((`motmaster`.`companyID` = BOOK_SUBJECT()))

3 个答案:

答案 0 :(得分:0)

你的桌子可能有latin1_swedish_ci整理,

如果创建一个返回UTF8字符串的存储函数,则没有简单的方法可以告诉应该返回latin1_swedish_ci字符串并在调用函数的其他表达式中使用

文档说明使用了返回字符串的默认排序规则(如果是UTF8字符集,则为UTF8_GENERAL_CI)。

但是如果你想让你的字符串表达式(调用你的函数)使用latin1_swedish_ci,你必须提及"整理latin1_swedish_ci"在表达的所有方面。

 RETURN @subject collate latin1_swedish_ci

了解更多

https://bugs.mysql.com/bug.php?id=24690

答案 1 :(得分:0)

CREATE FUNCTION `book_subject`() RETURNS varchar(10) CHARSET utf8
RETURN @subject

CREATE 
VIEW `qry_tools` AS
SELECT 
    `companyID`.`companyID` AS `companyID`
FROM companymaster
WHERE
    ((`motmaster`.`companyID` collate latin1_swedish_ci = BOOK_SUBJECT() collate latin1_swedish_ci))

您应该使用相同的排序规则进行比较。这将是有效的。

答案 2 :(得分:0)

感谢您的回答,但两个代码都没有。我看了回复后找到了解决方案。

  (CONVERT( `motmaster`.`companyID` USING UTF8) = BOOK_SUBJECT())