无法从数据库中获取正确的字符

时间:2010-03-01 23:15:26

标签: php mysql unicode character

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

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

    mysql_query('SET NAMES utf8');
 mysql_set_charset('utf8',$conn); 

2009年将输出2009年的N10?N10 ??? 2009年至2009年的N11?N11 ???

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

由于该表设置为使用latin1_swedish_ci,因此无法正确存储输入的UTF-8数据。您需要切换该表以使用utf8_unicode_ci来继续进行数据,但任何现有数据基本上都已损坏。切换整理后,您必须重新输入数据,以获取现有记录的正确日文字符。

答案 1 :(得分:0)

您需要将字符集更改为utf8。不需要更改排序规则以显示日语字符(但是为了能够对文本进行排序和比较,将其更改为utf8_general_ci可能是个好主意。)

答案 2 :(得分:0)

非常感谢您的回复,这就是发生的事情,我无法真正更改数据库中的任何内容,因为该网站的另一个版本仍然使用该数据库并将启动。所以我找到的解决方案如下:

案例场景: DB设置为使用UTF8 - > (utf8_general_ci)但是字段(至少是我需要的那个,设置为latin1_swedish_ci。

解决方案: 在mysql_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_decode /编码php函数等等等。)