Сохранить Акценты в базе данных MySQL - PullRequest
25 голосов
/ 31 января 2011


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

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

Ответы [ 8 ]

50 голосов
/ 08 января 2012

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

mysql_set_charset("utf8");

или для mysqli:

mysqli_set_charset($conn, "utf8");

или эквивалент ООП MySQL:

$conn->set_charset("utf8");

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

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

Это должно сработать

6 голосов
/ 31 января 2011

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

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

SET NAMES utf8;

после выполнениясоединение.

3 голосов
/ 09 октября 2013

mysqli_set_charset ($ conn, "utf8");

3 голосов
/ 31 января 2011

если вы используете PDO, вы должны создать его так:

new \PDO("mysql:host=$host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND =>  'SET NAMES utf8') );
1 голос
/ 04 июля 2011

Использовать UTF8:

Установить мета в вашем

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

Когда вы подключаетесь к своей базе данных MySQL, принудительно закодируйте, чтобы вам НЕ пришлось играть с настройками 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');
1 голос
/ 31 января 2011

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

Клиентские приложения, которым необходимо взаимодействовать с сервером с использованием Unicode, должны соответствующим образом установить набор символов клиента;например, с помощью инструкции SET NAMES 'utf8'.ucs2 не может быть использован в качестве клиентского набора символов, что означает, что он не работает для SET NAMES или SET CHARACTER SET.(См. Раздел 9.1.4, «Наборы символов соединения и сопоставления».)

В дополнение к этому:

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

после mysql_connect () и mysql_select_db () добавьте следующие строки: mysql_query ("SET NAMES utf8");

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

0 голосов
/ 12 мая 2014

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

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

0 голосов
/ 31 января 2011

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

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

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

...