如何将列解释为每个查询具有不同的字符集?

时间:2011-06-21 13:56:21

标签: mysql utf-8 collation

我需要与数据库连接,我无法更改排序规则和字符集。 但是,我想从中选择一些二进制数据,将其解释为UTF8,然后对其执行UPPER(因为只对二进制执行UPPER()返回原始值)。

我认为这有效:

SELECT UPPER(Filename.Name) COLLATE utf8_general_ci FROM Filename;

但它并没有抱怨

COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'binary'

这是公平的,我需要一些咒语来将二进制字段转换为utf-8。如何进行选择,为我提供一个计算列,并为其分配正确的字符集?

2 个答案:

答案 0 :(得分:2)

好的想通了。对于现代MySQL版本,您可以使用CAST,对于较旧版本的CONVERT(实际上是标准SQL)。

 SELECT UPPER(CONVERT(BINARY(Filename.Name) USING utf8)) FROM Filename;

答案 1 :(得分:0)

我认为你在寻找:

SELECT UPPER(Filename.Name COLLATE utf8_general_ci) FROM Filename;

但我不确定,因为我没有破坏的数据库来测试。