Main Topics
Browse All TopicsHi,
I'm facing problem displaying unicode data with mysql in a Linux server (please note i got no problem display it on a local Windows machine).
MySQL database/table is set as below:
Storage Engine: MyISAM
Charset: utf-8
Collation: utf8_general_ci
My test script is like below:
<?php
header ('Content-type: text/html; charset=utf-8');
?><head>
<title>Untitled Document</title>
</head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<?php
echo "Hi, Hello world, 免費參&#
//echo phpinfo();
/* Connecting, selecting database */
$link = mysql_connect("127.0.0.1",
mysql_select_db("test") or die("Could not select database");
echo "Connected successfully";
/* Performing SQL query */
$query = "SELECT * FROM table1 ";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
/* Printing results in HTML */
echo "<table>\n";
while ($line = mysql_fetch_array($result,
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>" . $col_value . "</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
/* Free resultset */
mysql_free_result($result)
/* Closing connection */
mysql_close($link);
?>
</body>
The current issue is the data pulled out is displayed in "?" , which is not displayed properly.
This is the phpinfo() i get from Linux Server:
http://www.myjavaserver.co
Anyone can help debug/ find the problem out? Thanks
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
try this when trying to display the texts from database
http://my2.php.net/manual/
try add:
mb_http_output('UTF-8');
ob_start('mb_output_handle
into my scripts above but it's not working, any idea?
I think the problem may be is on the connection to MySQL server or the output from MySQL server is not in UTF-8 format? I got some same problem before when using MySQL + JSP.. any idea?
PHP really doesn't handle unicode yet - it's coming in PHP6. What it does do is what blue_hunter is implying - it just passes through what it receives blindly - collations and charsets only come into play when you need to search or sort; for store and retrieve it's all just binary. If you happen to twiddle a string in a way that screws up its meaning in unicode (PHP currently has lots of function to do that!). The mb_ functions are a workaround to not break stuff if you do twiddle it, but if you just pass on what you receive, it should remain unicode-safe if it turned up in that format from MySQL.
You can set your MySQL connection and charset defaults using a my.cnf file on your DB server. That way it will default to using UTF-8 connections, charsets, collations etc without you having to issue those additional queries every time.
Just to be safe, you should save your scripts as UTF-8 as well (no BOM though) so that you can be sure that nothing in your output violates the charset, and use a charset-aware editor.
One very minor thing - the HTML you posted is incomplete; There are no doctype or <html> tags.
>>You can set your MySQL connection and charset defaults using a my.cnf file on your DB server. That way it will default to using UTF-8 connections, charsets, collations etc without you having to issue those additional queries every time.
Thanks for the comment, I guess so... so the simplest way to do it is to edit the setting in my.cnf file? Can you tell me where, and what setting should I edit here (and to what value, for example). I hope I got rights to edit this my.cnf.
Ya, I can display some unicode characters on other static php page without any problem, so i think the file itself is not causing the problem here.
>>One very minor thing - the HTML you posted is incomplete; There are no doctype or <html> tags.
I replace the doctype with this line of code:
header ('Content-type: text/html; charset=utf-8');
seems that both <html> doctype and header ('Content-type: text/html; charset=utf-8'); can't co-exist ?
Many thanks
Minimal contents for a my.cnf (usually in /etc/my.cnf):
[mysqld]
default-character-set=utf8
default-collation=utf8_gen
These options do effectively the same as this: http://dev.mysql.com/doc/r
> I replace the doctype with this line of code:
You should use both, and they need to match. IE can do peculiar things if either is missing or they don't match. They only have trouble co-existing if they don't agree! Consider the case where you load an HTML page from disk - there are no HTTP headers, so it needs to look in the document for an equivalent to the HTTP header, hence the name of the tag.
The chapter in the docs I pointed to also tell you how to set the database charset and collation through an SQL connection (i.e. what you get when you connect to it from PHP) - you can change them down to the field level if you really want, and it doesn't require any more privileges than you need for creating the DB in the first place, so it should be perfectly safe for shared hosting.
You might also like to check out http://phputf8.sourceforge
Business Accounts
Answer for Membership
by: ryancysPosted on 2006-08-17 at 03:15:59ID: 17332810
I solved the problem by adding lines:
n/5.0/en/c harset-con nection.ht ml
$result = mysql_query('SET NAMES utf8;');
$result = mysql_query('SET CHARACTER_SET utf8;');
Ref: http://mysql.com/doc/refma
Can this be simplified, so that I no need to include this all around the codes?
Many thanks