我在存储过程中有一个select语句,用于查询使用latin1排序规则的表。在Where子句中,我引用了一个返回varchar(25)charset utf8的函数。
在MySQL中,函数和存储过程都将运行,没有错误。
函数声明是:
CREATE FUNCTION GETLASTSERVICEDATE
(histType varchar(255),inCAT INT(11),inMRN VARCHAR(24))RETURNS varchar(25)CHARSET utf8
具有该功能的select语句是:
select * from table_xyz
where (service_date = (select GETLASTSERVICEDATE('IMMUNIZATIONS', 13, mrn)));
当我在Visual Studio中执行存储过程作为代码的一部分时,我始终遇到此错误:
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
任何人都知道如何解决此错误?
...谢谢
答案 0 :(得分:0)
简而言之,使用COLLATE
(请参阅http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html),
所以你的select语句应该是这样的:
SELECT * FROM `table_xyz`
WHERE (service_date COLLATE utf8_general_ci = (select GETLASTSERVICEDATE('IMMUNIZATIONS', 13, mrn)));