Save Accents in MySQL Database

限于喜欢 提交于 2019-11-28 06:20:40
Olivier Kaisin

Personally I solved the same issue by adding after the MySQL connection code:

mysql_set_charset("utf8");

or for mysqli:

mysqli_set_charset($conn, "utf8");

or the mysqli OOP equivalent:

$conn->set_charset("utf8");

And sometimes you'll have to define the main php charset by adding this code:

mb_internal_encoding('UTF-8');

On the client HTML side you have to add the following header data :

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

In order to use JSON AJAX results (e.g. by using jQuery), you should define the header by adding :

header("Content-type: application/json;charset=utf8");
json_encode(
     some_data
);

This should do the trick

The best bet is that your database connection is not UTF-8 encoded - it is usually ISO-8859-1 by default.

Try sending a query

SET NAMES utf8;

after making the connection.

if you use PDO, you must instanciate like that :

new \PDO("mysql:host=$host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND =>  'SET NAMES utf8') );

mysqli_set_charset($conn, "utf8");

Have you reviewed http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html:

Client applications that need to communicate with the server using Unicode should set the client character set accordingly; for example, by issuing a SET NAMES 'utf8' statement. ucs2 cannot be used as a client character set, which means that it does not work for SET NAMES or SET CHARACTER SET. (See Section 9.1.4, “Connection Character Sets and Collations”.)

Further to that:

if you get data via php from your mysql-db (everything utf-8) but still get '?' for some special characters in your browser (), try this:

after mysql_connect() , and mysql_select_db() add this lines: mysql_query("SET NAMES utf8");

worked for me. i tried first with the utf8_encode, but this only worked for äüöéè... and so on, but not for kyrillic and other chars.

Use UTF8:

Set a meta in your

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

When you connect to your mySQL DB, force encoding so you DONT have to play with your mysql settings

$conn = mysql_connect('server', 'user', 'password') or die('Could not connect to mysql server.');
mysql_select_db('mydb') or die('Could not select database.');
mysql_set_charset('utf8',$conn); //THIS IS THE IMPORTANT PART

If you use AJAX, set you encoding like this:

header('Content-type: text/html; charset=utf-8');

You need to a) make sure your tables are using a character encoding that can encode such characters (UTF-8 tends to be the go-to encoding these days) and b) make sure that your form submissions are being sent to the database in the same character encoding. You do this by saving your HTML/PHP/whatever files as UTF-8, and by including a meta tag in the head that tells the browser to use UTF-8 encoding.

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

Oh, and don't forget C, when connecting to the database, make sure you're actually using the correct character set by executing a SET NAMES charset=utf8 (might not be the correct syntax, I'll have to look up what it should be, but it will be along those lines)

PHP(.net) advises against setting charsets after connecting using a query like SET NAMES utf8 because your functionality for escaping data inside MySQL statements might not work as intended.

Do not use SET NAMES utf8 but use the appropriate ..._set_charset() function (or method) instead, in case you are using PHP.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!