Php Can';无法从数据库中获取要显示的正确字符

Php Can';无法从数据库中获取要显示的正确字符,php,mysql,unicode,character,Php,Mysql,Unicode,Character,我正在设计一个网站,现有数据库存在问题: 数据库collate设置为utf8_unicode_ci,在我调用的表行中,collate似乎设置为latin1_swedish_ci,其中存储的字符是日语(但即使在phpmyadmin中),您也会看到其他字符(我猜是因为latin1_swedish_ci) 当我打印查询结果时,我得到了一堆???现在使用 mysql_query('SET NAMES utf8'); mysql_set_charset('utf8',$conn); 2009

我正在设计一个网站,现有数据库存在问题: 数据库collate设置为utf8_unicode_ci,在我调用的表行中,collate似乎设置为latin1_swedish_ci,其中存储的字符是日语(但即使在phpmyadmin中),您也会看到其他字符(我猜是因为latin1_swedish_ci)

当我打印查询结果时,我得到了一堆???现在使用

    mysql_query('SET NAMES utf8');
 mysql_set_charset('utf8',$conn); 
2009年的产出会是10欧元吗?2009年会是10欧元吗?2009年会是11欧元吗?2009年会是11欧元吗


有什么想法吗?

因为表格被设置为使用拉丁语1_瑞典语ci,所以无法正确存储输入的UTF-8数据。您需要切换该表以使用utf8\u unicode\u ci来处理后续数据,但任何现有数据实际上都已损坏。切换校对后,您必须重新输入数据,以获得现有记录的正确日语字符。

您需要将字符集更改为utf8。不需要更改排序规则来显示日文字符(但为了能够对文本进行排序和比较,最好将其更改为utf8\u general\u ci)。

您好,谢谢您的回复,事情就是这样,我真的无法在数据库中更改任何内容,因为还有另一个版本的站点仍然使用该数据库,并且将启动。因此,我找到的解决方案如下:

mysql_query("SET NAMES 'Shift_JIS'",$conn);
mysql_set_charset('Shift_JIS',$conn); 
案例场景: DB设置为使用UTF8->(UTF8\u general\u ci),但字段(至少是我需要的字段)设置为latin1\u swedish\u ci

解决方案: 在mysql\u connect之后,我放置了以下内容:

mysql_query("SET NAMES 'Shift_JIS'",$conn);
mysql_set_charset('Shift_JIS',$conn); 
然后在PHP文件中:

$titleJP = $row['titleJP'];
$titleJP = mb_convert_encoding($titleJP, "UTF-8", mb_detect_encoding($titleJP,"Shift_JIS,JIS,SJIS,eucjp-win"));
现在,这些字符已经用正确的日语显示出来了。
我尝试了我能想到的所有其他解决方案,但没有成功(utf-8_解码/编码php函数等)

谢谢iKnowKungFoo,但问题是当前的数据库正在被另一个版本的网站使用,他们将继续运行。所以我不能真的这样做并重新输入信息。感谢Muleskinner,DB字符集被设置为UTF8->UTF8\u general\u ci),但字段有拉丁字母1。。。整理,所以这是一个问题。我将在一分钟内发布我实现的解决方案。