我创建了以下函数,以便在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()))
答案 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
了解更多
答案 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())