使用latin1对表进行MySQL查询时使用返回utf8的函数

时间:2013-11-18 22:40:41

标签: mysql function

我在存储过程中有一个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 '='

任何人都知道如何解决此错误?

...谢谢

1 个答案:

答案 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)));