When you connect to your MYSQL database try running just after connecting
SET names 'utf8'
I've prepared the whole test:
1) I've created database named testencoding
2) I've created sample table:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `sample` (
`id` int(11) NOT NULL,
`value` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
ALTER TABLE `sample`
ADD PRIMARY KEY (`id`);
ALTER TABLE `sample`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
You can import it into database using phpmyadmin
3)
I've created test PHP script:
<?php
$sub = "=?UTF-8?Q?=e2=99=a3?= Styles to =?UTF-8?Q?=e2=99=a3?=";
header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('utf-8');
$subjectvalue=mb_decode_mimeheader($sub);
$subjectvalue2 = '会意字 / 會 huìyìzì ';
echo $subjectvalue."<br />";
echo $subjectvalue2."<br />";
$link = mysqli_connect("localhost","root","","testencoding");
mysqli_query($link,"SET NAMES 'utf8'");
mysqli_query($link,"INSERT INTO sample(`value`) VALUES('".mysqli_real_escape_string($link,$subjectvalue)."')");
mysqli_query($link,"INSERT INTO sample(`value`) VALUES('".mysqli_real_escape_string($link,$subjectvalue2)."')");
$result = mysqli_query($link, "SELECT * FROM sample");
echo "<br /><br />Data from database<br /><br />";
while ($data = mysqli_fetch_assoc($result)) {
echo $data['id'].' '.$data['value']."<br />";
}
4) Results are:
In phpmyadmin:
In PHP script:
So to sum up, everything works as expected. Data are inserted as they should be, data in phpmyadmin and those read from database via php are the same as they were inserted