测试查询:
select if(true,get_paper_real_amount(11),'абвгд');
其中get_paper_real_amount(int(11))
存储函数,返回int(11)
和'абвгд'
作为cp1251字符串。
在mysql 5.0和5.1上,一切都很迷人。 在mysql 5.5和5.6(没有在其他版本上测试)有问题,得到错误:
Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (cp1251_general_ci,COERCIBLE) for operator if
手动says:
IF(expr1,expr2,expr3)
....
If expr2 or expr3 produce a string, the result is a string.
显然get_paper_real_amount(11)
结果使用latin1
字符集和latin1_swedish_ci
整理转换为字符,而show variables like '%character%'
报告:
character_set_client cp1251
character_set_connection cp1251
character_set_database cp1251
character_set_filesystem binary
character_set_results cp1251
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/local/mysql/share/charsets/
此外,我用
编译了5.5和5.6cmake . -DDEFAULT_CHARSET=cp1251 -DDEFAULT_COLLATION=cp1251_general_ci
仍然没有成功。
我在5.0时代开发了应用程序,现在要更新到现代的mysql版本,但是这个问题让我更新了很多代码......是否有任何解决方法?