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

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

27.11.2010, 14:49. Показов 144729. Ответов 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
Закрытая тема Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru