Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/793: Рейтинг темы: голосов - 793, средняя оценка - 4.64
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2

Базы Данных. Кодировка ввода/вывода.

27.11.2010, 14:49. Показов 144924. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте! Последнее время на форуме часто проскакивает вопрос на тему "Кодировка в MySQL" или нечто подобное. Создано множество подобных тем, в которых форумчане неустанно пишут одно и тоже. Что бы как-то сократить дублирование одинаковых, по сути, вопросов, а так же время на поиск нужного ответа и не ждать того завораживающего момента, когда кто-то ответит в Вашей теме, и была создана данная тема. Она не большая, т.к. собрано все самое основное. И так, приступим.
Начну с того, что скажу: все данные должны быть в одной кодировке. И файл со скриптом, и данные в таблице БД и отправляемые заголовки браузеру с указанием кодировки( если есть ). На примере это должно быть видно.
Файл содержащий этот код сохранен с кодировкой CP1251 и данные в таблице БД хранятся в UTF8
PHP
1
2
3
4
5
6
7
8
9
10
<?php
header( 'Content-Type: text/html; charset=utf-8' );
mysql_connect( 'MyHOST', 'MyLOGIN', 'MyPASS' );
mysql_select_db( 'MyDB' );
mysql_set_charset( 'utf8' );
$query = mysql_query( "SELECT * FROM `MyTABLE`" );
while ( $r = mysql_fetch_assoc( $query ) )
    echo $r['rusText'], '<br />';
echo iconv( 'cp1251', 'utf-8', 'Текст!' );
?>
А теперь пояснение. Не в комментариях, т.к. довольно большие для комментария.
header( 'Content-Type: text/html; charset=utf-8' );
Или средствами HTML1( см. историю редактирования в конце сообщения ):
HTML5
1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Кодировка, в которой нужно вывести посетителю данные. Она может отличаться от кодировки файла. Главное помнить: если кодировка вывода отличается от кодировки файла, то и выводимые данные также должны быть перекодированы в эту кодировку( кодировку отправляемого заголовка, проще говоря ). Я не сторонник подобного. Лучше сразу указывать одну кодировку, что бы не тратить время еще и на перекодировку в самом скрипте.

mysql_set_charset( 'utf8' );
В этой строке мы указываем серверу MySQL, что данные нужно перекодировать в utf8. В нашем случае это не обязательно( у нас и так БД с такой кодировкой ). Но это пример и хочется охватить как можно больший диапазон задаваемых вопросов пользователями. Эта функция, кстати, заменяет все эти запросы:
PHP
1
2
3
4
mysql_query ("set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
mysql_query ("SET NAMES utf8");
И работает значительно быстрее. Но появилась она только в PHP 5.2.3 и поддерживается MySQL сервером с версией >= 5.0.7. Если используете эту функцию, то подобные запросы можно не отправлять. В эту функцию передается та кодировка, которая указывается в отправляемом заголовке( если есть ) или кодировка самого файла( если такого заголовка нет ). Если кодировка файла и таблицы в БД совпадает, то использовать эту функцию( как и заголовки выше ) нет смысла. Так же хочу обратить внимание читателя на то, что при работе с БД кодировка пишется без дефиса( utf8 ). Будьте внимательны, если не верно указать кодировку, то вывод будет состоять из вопросиков ( ??? ).

iconv( 'cp1251', 'utf-8', 'Текст!' );
Обратите внимание, что если отправляемый заголовок отличается от кодировки файла, то все выводимые данные нужно так же перекодировать в кодировку, указываемую в отправляемом заголовке. Для данных из таблицы в БД это делается, при вызове функции mysql_set_charset();,а для другого текста это можно сделать функцией iconv();. В первом параметре этой функции передается текущая кодировка ( кодировка файла ), во втором параметре - желаемая кодировка( кодировка заголовка ) ну а в третьем - сам текст, который необходимо перекодировать.
Вроде бы все написал. Всё, что хотел вернее. Если что-то еще вспомню - обязательно допишу сюда

История редактирования сообщения
1 - добавил еще один способ указания кодировки вывода через meta-тег. ( Дата редактирования: 27.11.10 )
2 - добавил похожую тему. ( Дата редактирования: 27.11.10 )
57
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2010, 14:49
Ответы с готовыми решениями:

БазЫ данных (кодировка)
Поставил кодировку UTF-8 , но русские буквы не появились. Помогите исправит файл.

Кодировка при выводе данных из базы
Помогите пожалуйста решить проблему!!! У меня есть база данных, которую мне нужно привязать к сайту. Сайт делаю на joomla 2.5. Все...

Кодировка при получении данных из базы PHPBB3
Доброго всем времени суток! Есть форум на движке PHPBB3 и есть сайт, пытаюсь на сайте разместить последние темы форума. Данные выдернул...

2
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
10.11.2012, 14:59
Хотелось бы ещё кое что сказать про кодировку.

Если у вас выводится текст из базы вот так
Краткая
Значит у вас соединение с БД работает в кодировке UTF-8, а страница открыта в браузере в кодировке cp1251.
Решение:
-либо сохраните страницы в кодировке UTF-8 без BOM и укажите в .htacces для сервера apache кодировку
Code
1
AddDefaultCharset utf-8
вместо .htaccess можно отправить заголовок с помощью
PHP
1
header('Content-Type: text/html; charset=utf-8');
Это позволить сайту работать в UTF-8 кодировке.

-либо выполните запрос в бд сразу после соединения
SQL
1
SET NAMES 'cp1251';
Это позволит работать сайту в кодировке windows-1251.

Если из базы выводится текст так
�������
то всё с точностью до наоборот


Предпочтительней работать в кодировке UTF-8.
Например вы захотите использовать AJAX, но в некоторых браухерах он работает только с кодировкой UTF-8.
Или функцию json_encode - она тоже работает с кодировкой UTF-8.
Так же в XML лучше использовать эту кодировку.


Если же у вас такой вывод:
???????????
Это скорей всего означает что данных в таблице в кириллице нет вообще.
Часто это из за того, что по умолчанию в MySQL используется кодировка latin1.
И если создать таблицу без явного указания другой кодировки, то она будет создана в latin1. А данная кодировка вообще не работает с кириллицей.
Посмотрите что выводит запрос
SQL
1
SHOW CREATE TABLE `table`;
где table - имя таблицы
Пример вывода
SQL
1
2
3
CREATE TABLE `table` (
  ...
) DEFAULT CHARSET=latin1
Это говорит о том тчо таблица в кодировке latin1 по умолчанию. Можно исправить таким запросом
SQL
1
ALTER TABLE `table`  CONVERT TO CHARACTER SET 'utf8';
15
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.04.2013, 21:26
Еще изображение одно, возможно, кому-то поможет..
19
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2013, 21:26
Помогаю со студенческими работами здесь

Не работает выборка информации из базы данных. Неправильная кодировка
Здравствуйте. Некорректно работает выборка информации из базы данных (с помощью PHP). Проблема в кодировке; MySQL неправильно воспринимает...

Сортировка данных вывода из базы данных
Доброго времени суток друзья! У меня вот такой вопрос, помогите найти решение. Есть сайт, там есть почта , как сделать чтобы на первом...

Кодировка - текст из базы данных отображается в виде набора символов
Текст из базы данных отображается в виде набора символов. Темы похожие видел, но сам исправить не смог. Если можете, помогите исправить.

Нет вывода из базы данных PHP из MYSQL
Добрый день не могу получить данные из таблицы код $query2 = sprintf('SELECT value FROM '.DB_PREFIX.'setting WHERE \'key\' =...

Цикл вывода информации из базы данных выводит лишнего
Добрый вечер. Есть несколько циклов. Первый выводит первые три записи из БД. Далее идет второй цикл, который выводит с шестой по восьмую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Закрытая тема Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru