Контрольный список для проблем с символами/кодировками/сопоставлением
В том числе mysql
, mysqli
, PDO
Содержание
- ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
- Моя вставка в мою БД не работает должным образом! Что я могу сделать?
- Изменить набор символов и сопоставление базы данных или таблицы
- Установите кодировку ваших файлов скрипта
- Установите кодировку вашей страницы с помощью php или метатега
- В чем разница между UTF8 и UTF8mb4?
- Ответ на этот конкретный вопрос
- Дополнительная информация/дополнительные ссылки
- Дополнительные примечания
1. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Этот ответ должен не только отвечать на этот вопрос, но и должен быть немного более обширным, чтобы больше людей быстрее находили комплексный и хороший ответ!
!Важное примечание!
Если вы что-то меняете в своей базе данных, обязательно убедитесь, что у вас есть резервная копия вашей базы данных! Проверьте это 2 раза, или 3!
Я открыт для улучшений и комментариев, таких как исправления ошибок.
Дополнительно извиняюсь, если грамматика не идеальна :D
Если вы застряли на таком вопросе:
- Php + Mysql (UTF-8, utf8mb4) некоторые символы все еще глючат
- Как преобразовать весь набор символов и сопоставление базы данных MySQL в UTF-8?
- «Неправильное строковое значение» при попытке вставить UTF-8 в MySQL
- Изменить набор символов MySQL по умолчанию на UTF-8 в my.cnf?
- Использование utf8mb4 с php и mysql
- PDO + MySQL и сломанная кодировка UTF-8
- Ошибка при вставке данных в php Mysql
- PHP PDO: кодировка, набор имен?
- УСТАНОВИТЬ ИМЕНА utf8 в MySQL?
- Проблемы с кодировкой PHP mysql utf8
- UTF-8 полностью
- Манипулирование данными utf8mb4 из MySQL с помощью PHP
- ОШИБКА 1115 (42000): Неизвестный набор символов: «utf8mb4» в mysql
... тогда мой ответ, возможно, поможет вам!
2. Моя вставка в моей БД не работает должным образом! Что я могу сделать?
Если ваша вставка не работает должным образом, и ваши вставленные данные выглядят примерно так в вашей базе данных, это может быть по разным причинам!
Примеры:
??????????
????????????????
�??_ �?�
â_ ⬠⥠J
Вот небольшой контрольный список, по которому вы можете проверить, все ли так, как должно быть!
(После контрольного списка есть несколько дополнительных сведений для mysql
, mysqli
и PDO
)
Контрольный список:
mysql:
-mysql_query("SET NAMES 'utf8'");
Запускайте SET NAMES перед каждым используемым запросом. Потому что, если драйвер mysql не предоставляет механизм для кодировки, вам нужно использовать SET NAMES!
-mysql_query("SET CHARACTER SET utf8 ");
Установить символ utf8
-mysql_set_charset('utf8');
Установить кодировку utf8
-драйвер API mysql не поддерживает utf8mb4 (ОШИБКА 1115 (42000))
-character_set_server=utf8
установить сервер персонаж
PDO:
-$dbh->exec("set names utf8");
Если вы используете PDO, вы можете использовать эту строку для SET NAMES
-$dbh = new PDO("mysql:host=$host;dbname=$db;charset=utf8");
Эта строка устанавливает кодировку, но у вас должен быть PHP 5.3.6 или выше
-$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ");
Вы также можете установить SET NAMES с помощью этого строка
-mb_internal_encoding('UTF-8');
для установки кодировки при использовании PDO
3. Изменить набор символов и сопоставление базы данных или таблицы
Если вам нужно изменить кодировку или сопоставление базы данных или таблицы, вы можете использовать эти строки кода:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
4. Установите кодировку ваших файлов скрипта
Возможно, вам придется проверить, что ваши файлы скрипта (php) сохранены с правильной кодировкой!
Для этого я бы порекомендовал вам Notpad++!
Если вы открыли свой файл в блокноте, перейдите в пункт меню «Кодировка» и измените кодировку
5. Установите кодировку вашей страницы с помощью php или метатега.
Для отображения данных в utf8/utf8mb4 вы должны быть уверены, что на вашем сайте установлена правильная кодировка!
Вы можете установить кодировку тремя способами:
//PHP
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
//HTML
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Также, чтобы принять utf8 в вашей форме, используйте:
<form accept-charset="UTF-8">
6. В чем разница между UTF8 и UTF8mb4?
UTF8:
-utf8 поддерживает только символы с 3 байтами
-... (многие другие)
UTF8MB4:
-utf8mb3 поддерживает символы с 4 байтами
-... (многие другие)
7. Ответ на этот конкретный вопрос
Я думаю, что это должно работать, так как вы используете PDO
:
(После того, как вы создали объект PDO! Если вы используете версию PHP ниже 5.3.6)
$dbh->exec("set names utf8");
В противном случае попробуйте один из них:
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
ОБНОВИТЬ:
Чтобы изменить collation
или charset
на database
или table
, используйте это:
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
8. Дополнительная информация/дополнительные ссылки
9. Дополнительные примечания
9.1 Отчеты об ошибках
Если ошибка не отображается, используйте этот фрагмент кода:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
Юникод 9.2
Чтобы не ошибиться, нужно хорошо понимать utf8!
9.3 Одно слово о mysql, mysqli и PDO
Мой личный рейтинг:
- ЗОП
- mysqli
- СУБД
Я бы порекомендовал вам использовать PDO или mysqli, потому что они имеют много преимуществ по сравнению с mysql!
person
Rizier123
schedule
07.11.2014
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
- person Rizier123   schedule 07.11.2014