Сохранение акцентов в базе данных MySQL


Я пытаюсь сохранить французские акценты в своей базе данных, но они не сохраняются, как должны в БД.
например, "é" сохраняется как "é".
Я попытался установить мои файлы в " Unicode (utf-8)", поля в БД - "utf8_general_ci", а также сама БД.
когда я смотрю на свои данные, опубликованные через AJAX с Firebug, я вижу, что акцент передан как "é", так что это правильно.

спасибо и дайте мне знать вам нужно больше информации!

8 ответов


лично я решил ту же проблему, добавив после код подключения MySQL:

mysql_set_charset("utf8");

или для mysqli:

mysqli_set_charset($conn, "utf8");

или эквивалент mysqli OOP:

$conn->set_charset("utf8");

и иногда вам придется определить основная кодировка php добавив этот код:

mb_internal_encoding('UTF-8');

на стороне HTML клиента вы должны добавить следующие данные заголовка:

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

для использования результатов JSON AJAX (например, с помощью jQuery), вы должны определить заголовок, добавив:

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

это должно сделать трюк


лучше всего, что ваше соединение с базой данных не кодируется UTF-8 - обычно это ISO-8859-1 по умолчанию.

попробуйте отправить запрос

SET NAMES utf8;

после подключения.


Если вы используете PDO, вы должны создать такой экземпляр:

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

mysqli_set_charset($Конн, "в формате utf8");


вы рассмотрели http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html:

клиентские приложения, которые нужно связь с сервером с помощью Unicode должен установить клиент набор символов соответственно; для например, путем выдачи набора имен 'utf8' заявление. ucs2 не может быть использован в качестве набор символов клиента, что означает, что он не работает для SET NAMES или SET НАБОР СИМВОЛОВ. (См. Раздел 9.1.4, "Наборы символов соединения и Сопоставления.")

кроме того:

Если вы получаете данные через php из своего mysql-db (все utf-8), но все же получить? для некоторых специальных символов Ваш браузер (), попробуйте следующее:

после функцию mysql_connect() , и mysql_select_db() добавить эти строки: mysql_query("набор именами в формате utf8");

работал для меня. я попробовал сначала с помощью utf8_encode, но это работало только для эуэээ... и так далее, но не для kyrillic и другие символы.


используйте UTF8:

установите мета в свой

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

при подключении к MySQL DB, кодировка силы, так что вам не придется играть с настройками mysql

$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

Если вы используете AJAX, установите кодировку следующим образом:

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

вам нужно a) убедиться, что ваши таблицы используют кодировку символов, которая может кодировать такие символы (UTF-8 имеет тенденцию быть кодировкой в эти дни) и b) убедитесь, что ваши представления формы отправляются в базу данных в той же кодировке символов. Вы делаете это, сохраняя HTML/PHP/любые файлы как UTF-8, и включив мета-тег в голове, который говорит браузеру использовать кодировку UTF-8.

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

О, и не забудьте C, при подключении к база данных, убедитесь, что вы на самом деле используете правильный набор символов, выполнив набор имен charset=utf8 (может быть, не правильный синтаксис, мне придется искать, что это должно быть, но это будет по этим строкам)


PHP (.net) советует не устанавливать кодировки после подключения с помощью запроса, такого как SET NAMES utf8, потому что ваша функциональность для экранирования данных внутри операторов MySQL может не работать по назначению.

Не используйте SET NAMES utf8, но используйте соответствующий ..._set_charset () функция (или метод) вместо этого, если вы используете PHP.