将MySQL查询结果转换为utf8编码

59

我在数据库中有一个表格,我想运行如下查询:

SELECT column1, column2 FROM my_table WHERE my_condition;

但是我希望mysql能以utf8编码返回column2列。mysql有没有这样的函数来完成这个任务?那是什么?

但是我希望mysql能以utf8编码返回column2列。mysql有没有这样的函数来完成这个任务?那是什么?


4
尝试使用SELECT column1, CONVERT(column2 USING utf8)... - Explosion Pills
4个回答

82

2
如何对 select * 进行操作,因为这是一个语法错误,可以使用 select convert(* using utf8) - Gaurav Aggarwal
2
嘿,伙计,我相信你不能使用通配符并且必须逐个转换列: SELECT CONVERT(mycol1 USING utf8), CONVERT(mycol2 USING utf8) - josh-fuggle

50
SELECT CONVERT(CAST(column as BINARY) USING utf8) as column FROM table 

1
谢谢你,你救了我的一天 :) - Mohammed Tawfik
谢谢!你救了我的一天! - Portekoi
CAST转换为二进制让我救了一命!你太棒了! - amitdar
在将其转换为UTF-8之前,将该列转换为二进制对我也解决了这个问题。 - Diego Victor de Jesus
1
这对我没有起作用。我不得不采取另一种方式,在外部进行CAST转换。 - agent provocateur

29

添加:

当使用MySQL客户端库时,您应该防止将数据重新转换为连接的默认字符集。(请参见mysql_set_character_set()[1]

在这种情况下,请使用额外的二进制转换:

SELECT column1, CAST(CONVERT(column2 USING utf8) AS binary)
FROM my_table
WHERE my_condition;
否则,SELECT语句会被转换为utf-8编码,但是你的客户端库会将其转换回(可能不同的)默认连接字符集。

3
这对我有用。谢谢。 CONVERT(CAST( 对我没用。 - agent provocateur
一样的情况,只使用转换的被接受答案对我没用,这个可以,谢谢。 - Alex

13

我已经使用以下代码解决了 LATIN1(或您的数据库字符集)到 UTF8 的问题:

SELECT column1,
       CONVERT(CAST(CONVERT(column2 USING LATIN1) AS BINARY) USING UTF8) AS column2
  FROM my_table
 WHERE my_condition

它从LATIN1转换为BINARY,然后再转换为UTF8,因为直接从LATIN1转换为UTF8可能无法正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接