2017-08-06 159 views
1

我想插入日文字符并显示它们,但我得到的只是乱码。我已经将我的数据库编码设置为utf8_general_ci;所有列都从表中继承。mysql日文字符显示不正确

我使用的代码是:

$db = new Database; 
$json = file_get_contents('php://input'); 
$obj = json_decode($json, TRUE); 
$db->query("SET NAMES utf8"); 
$db->query("SET CHARACTER SET utf8"); 
$db->query("INSERT INTO `flash_cards`.`flash_card` (`kanji`) VALUES ('いく')"); 
$db->execute(); 
$db->query('select * from flash_card'); 
$rows = $db->resultset(); 
print_r('行く'); 
echo '行く'; 
print_r(json_encode($rows)); 

页面正确显示汉字时,我直接把它显示在页面上,但是当我从数据库中提取的问题出现了。这导致我相信这是一个编码/解码问题。

我收到的输出是

行く行く[{"id":"1","kanji":"\u3044\u304f"},{"id":"2","kanji":"\u3044\u304f"}] 

我不确定还有什么我能做的。我花了很多时间试图解决这个问题无济于事。我很清楚在整个stackoverflow几个职位,但我仍然卡住。

任何帮助将不胜感激。

+0

你目前的MySQL版本? – funilrys

+0

mysql 5.7.19-0ubuntu0.16.04.1 – o6t9o

+0

如果你真的输出文本会发生什么? –

回答

1

只有当您的MySQL版本> = 5.6时,以下才有效。

我没有任何日文字符/数据库来测试,但following建议CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci可能会比SET CHARACTER SET utf8好。

编辑

没看过这么多,不好意思才发现,原来你以前json_encode()让你的输出。

如果你想获得与json_encode()你应该做的字符如下:

print_r(json_encode($rows, JSON_UNESCAPED_UNICODE)); 
+0

U + 3XXX是在BMP内。 –

+0

当试图这样做时,我得到的字符是:“\ u3044 \ u304f” – o6t9o

+0

@ o6t9o更新我的回答:) – funilrys