14

I've always used ISO-8859-1 encoding, but I'm now going over to UTF-8.

Unfortunately I can't get it to work.

My MySQL DB is UTF-8, my PHP document is encoded in UTF-8, I set a UTF-8 charset, but it still doesn't work.

(it is special characters like æ/ø/å that doesn't work)

Hope you guys can help!

3
  • Are your meta tags set as UTF-8? Commented Jan 7, 2011 at 8:27
  • here are some goo utf-8 tips and solutions about encoding problems: utf-8.de/index.php?area=tutorials Commented Jan 2, 2012 at 23:05
  • hmm what exactly doesn't work about those characters? what you paste above is valid utf8 hexutf8.com/?q=c3a62fc3b82fc3a5 Commented Oct 5, 2016 at 3:11

7 Answers 7

21

Make sure the connection to your database is also using this character set:

$conn = mysql_connect($server, $username, $password);
mysql_set_charset("UTF8", $conn);

According to the documentation of mysql_set_charset at php.net:

Note:
This is the preferred way to change the charset. Using mysql_query() to execute 
SET NAMES .. is not recommended.

See also: https://www.php.net/manual/en/function.mysql-set-charset.php

Check the character set of your current connection with:

echo mysql_client_encoding($conn);

See also: https://www.php.net/manual/en/function.mysql-client-encoding.php

If you have done these things and add weird characters to your table, you will see it is displayed correct.

Sign up to request clarification or add additional context in comments.

2 Comments

Note that as of PHP 5.5.0, mysql_set_charset is deprecated, see php.net/manual/en/function.mysql-set-charset.php. For reference, the page states: Warning This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used.
mysqli_set_charset($con,"utf8"); (w3school)
10

Remember to set connection encoding to utf8 as well.

In ext\mysqli do $mysqli->set_charset("utf8")

In ext\mysql do mysql_set_charset("utf8")

With other db extensions you might have to run query like SET NAMES 'utf8'

Some more details about connection encoding in MySQL

As others point out, making sure your source code is utf-8 encoded also helps. Pay special attention to not having BOM (Byte Order Mark) - it would be sent to browser before any code is executed, so using headers or sessions would become impossible.

Comments

2

After connecting to db, run query SET NAMES UTF8

$db = new db(...);
$db->query('set name utf8');

and add this tag to header

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

1 Comment

this http-surrogate helps nothing. why not to send original HTTP header?
1

Are you having this error? MySql SELECT UNION Illegal mix of collations Error? Just set you entire mysql to utf 8 then

SET character_set_connection = utf8;

Comments

1

Try this after connecting to mysql:

mysql_query("SET NAMES 'utf8'");

And encode PHP document in UTF-8 without BOM.

Comments

1

I had the same problem but now its resolved. Here is the solution:

1st: update ur table ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

2nd: add this in the head section of the HTML code:

Regards Saleha A.Latif

Comments

1

Nowadays PDO is the recommended way to use mysql. With that you should use the connection string to set encoding. For example: "mysql:host=$host;dbname=$db;charset=utf8"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.