Save Accents in MySQL Database

时间秒杀一切 提交于 2019-12-17 18:07:18

问题



I'm trying to save French accents in my database, but they aren't saved like they should in the DB.
For example, a "é" is saved as "é".
I've tried to set my files to "Unicode (utf-8)", the fields in the DB are "utf8_general_ci" as well as the DB itself.
When I look at my data posted through AJAX with Firebug, I see the accent passed as "é", so it's correct.

Thanks and let me know you need more info!


回答1:


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




回答2:


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.




回答3:


mysqli_set_charset($conn, "utf8");



回答4:


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') );



回答5:


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');



回答6:


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.




回答7:


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)




回答8:


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.



来源:https://stackoverflow.com/questions/4854446/save-accents-in-mysql-database

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