mysql返回排序规则的混合

eivnm1vs  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(312)

我在视图db中有两个不同的内容,其中视图db是从表db生成的。
表中有两列

(CASE WHEN view.dcs = 8 then view.uc2content else view.utf8content END) as 'dcsContent'

uc2content和utf8content肯定是两个不同的编码字符,我使用这个查询创建了一个视图

CONVERT(a.textcolA USING utf8) as utf8content,
CONVERT(a.textcolb USING ucs2) as uc2content,

你知道怎么摆脱这个吗 mix-of-collations ?
提前谢谢

yc0p9oo0

yc0p9oo01#

对于所有情况,结果列必须在1个字符集中。如果源列使用不同的字符集,请将它们转换为一个字符集(最好是utf8bm4,对于较旧的mysql版本,最好是utf8)。

(CASE WHEN view.dcs = 8 
  THEN CONVERT(view.uc2content USING utf8bm4)
  ELSE CONVERT(view.utf8content USING utf8mb4)
END) AS 'dcsContent'

但是,我认为最好不要首先将源代码转换为不同的字符集。首先只需将所有内容存储在utf8bm4或utf8中,而不在select或view中转换任何内容。

1dkrff03

1dkrff032#

不能在一列中混合使用两个字符集。在执行查询之前,引擎需要知道结果集中每一列的确切数据类型。这包括字符集和排序规则。我甚至无法想象你如何理解这一点,或者你将如何处理客户端的预期结果。也许还有另一种更好更简单的方法来解决真正的问题。
但是,您可以做的是以二进制形式返回值:

(CASE WHEN view.dcs = 8
    then BINARY view.uc2content
    else BINARY view.utf8content
END) as 'dcsContent'

相关问题