我正在重新设计一个网站,我遇到了一个现有数据库的问题:数据库collate设置为utf8_unicode_ci,在我调用的表行中,collate似乎设置为latin1_swedish_ci,其中存储的字符是日语(但即使在phpmyadmin中也是如此),您可以看到其他字符(我猜是因为latin1_swedish_ci)。
当我打印查询的结果时,我得到了一串?现在使用
mysql_query('SET NAMES utf8');
mysql_set_charset('utf8',$conn);
是否会输出2009年的欧元N10?N10??
有什么想法吗?
发布于 2010-03-03 15:25:24
大家好,谢谢你的回复,这就是发生的事情,我不能真的改变数据库中的任何东西,因为有另一个版本的网站仍然使用该数据库,并将上线。因此,我找到的解决方案如下:
案例场景:数据库设置为使用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/encode php函数等)。等等)
发布于 2010-03-01 23:20:29
由于该表被设置为使用latin1_swedish_ci,因此无法正确存储输入的UTF8数据。您需要将该表切换为使用utf8_unicode_ci存储后续数据,但任何现有数据实际上都已损坏。切换排序规则后,您必须重新输入数据,以便为现有记录获取正确的日语字符。
发布于 2010-03-01 23:25:56
您需要将字符集更改为utf8。不需要更改排序规则来显示日语字符(但为了能够对文本进行排序和比较,最好将其更改为utf8_general_ci)。
https://stackoverflow.com/questions/2359827
复制