运算符内的mysql类型转换if

时间:2018-01-26 15:01:38

标签: mysql character-encoding collation

测试查询:

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.6
cmake . -DDEFAULT_CHARSET=cp1251 -DDEFAULT_COLLATION=cp1251_general_ci

仍然没有成功。

我在5.0时代开发了应用程序,现在要更新到现代的mysql版本,但是这个问题让我更新了很多代码......是否有任何解决方法?

0 个答案:

没有答案