Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Совсем запутался с базами, Помогите разобраться с кодировками. 
V
    Опции темы
EasyTask
Дата 18.9.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Всем привет. У меня такая проблема: я не умею создавать корректные базы MySQL =) Все началось с того я решил завести базу под свой движок. MySQL на локалхосте полностью настраивал руками (в смысле не пользовался денвером и аналогами), по началу были какие то проблемы с кодировками, но я их быстро решил. И так, сейчас у меня в конфиге mysql написано следующее:

MySQL-кодировка:  UTF-8 Unicode (utf8) 

Как на базе этого поднять базу которая будет корректно работать с русским текстом? Прежде чем создавать базу я погуглил и напршел к выводу - ВСЕ должно быть в кодировке UTF-8. Я создал таблицы и базу используя в параметре сравнение эту же кодировку. После чего, заполнил базу через phpmyadmin. Мое удивление было велико когда я обнаружил что при выводе значений на сайт русские буквы символами "?". Не долго думая я опять поискал в гугле решение и нашел: добавить в скрипт строчки:
Цитата
    mysql_query ("set character_set_client='cp1251'");
    mysql_query ("set character_set_results='cp1251'");
    mysql_query ("set collation_connection='cp1251_general_ci'"); 

После чего вывод стал нормальный. Но как только я стал писать код для добавление информации в базу через веб интерфейс я столкнулся с еще более интересно проблемой:

При попытке добавить строку содержащую русские или английские буквы ничего не добавляется

Если в качестве значений пишу цифры - все ок. Я считаю что во всем виновата кодировка. Сначала я хотел везде поменять ее на "cp1251", но оказалось что на хостинге в конфиге тоже указана UTF-8, то есть так и так мне придется настраивать базу в условиях "Кодировка по умолчанию UTF-8". 

Пожалуйста, помогите разобраться какая должна быть: Default charset? Какие сравнения указывать при создании базы? Таблицы? Какой код писать в файл подключения?

Заранее всем большое спасибо!
PM MAIL   Вверх
enoff
Дата 18.9.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



Все правильно,
Цитата(EasyTask @  18.9.2010,  13:29 Найти цитируемый пост)
ВСЕ должно быть в кодировке UTF-8.

ну так почему тогда 
Цитата(EasyTask @  18.9.2010,  13:29 Найти цитируемый пост)
set character_set_results='cp1251'

???
Вместо трех запросов можно делать один:
Код

mysql_query("SET NAMES='utf-8'");

Везде должно быть utf-8.
Скрипты, данные, кодировка у таблиц.
PM MAIL ICQ Skype GTalk   Вверх
EasyTask
Дата 18.9.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Цитата

ну так почему тогда

Без этого кода у меня не выводятся русские буквы.

В общем окончательно запутался :(((

На запрос:
Цитата

INSERT INTO mainmenu (`name`) VALUES ('абв');

Получаю:
Если добавляю из PhpMyAdmin - Значение вставляется в базу, но на сайте не корректно выводиться
Если добавляю с сайта - не попадает в базу
Если меня в браузере кодировку (по умолчанию стоит cp1251) - Вижу русские буквы, не вижу остального.

Я понял так. В браузере у меня CP1251, в базе UTF-8. Задача приравнять одно к другому, но как это сделать? Если я пропишу на сайте кодировку UTF-8 он будет не корректно отображаться. Если делать базу в cp1251, то как? Если у меня и на локалхосте и на сервере дефолт - UTF-8? Да и к тому же везде советуют ставить UTF-8.

PM MAIL   Вверх
enoff
Дата 18.9.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



С кодировкой определитесь. utf-8 или windows-1251?
На хостинге написано utf-8? Вот тогда и делайте все в utf-8.
Создайте таблицы, при создании указывайте utf-8.
php-скрипты сохраните в кодировке utf-8.
В самом начале скриптов до любого вывода отправте заголовок
Код

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

В скриптах после mysql_connect()
Код

mysql_query("SET NAMES 'utf-8'");


вставте из скрипта данные
Код

mysql_query("INSERT INTO `table`(`name`) VALUES('имя')");

Потом прочитайте и выведете их.
Если браузер пытается отобразить не как utf-8, то в хтмл пропишите
Код

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


Добавлено через 3 минуты и 29 секунд
И все запросы к mysql делайте пока так:
Код

mysql_connect() or die(mysql_error());
mysql_query() or die(mysql_error());

Позволит увидеть ошибки в запросах, если есть.
PM MAIL ICQ Skype GTalk   Вверх
EasyTask
Дата 18.9.2010, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



UTF-8

Да, я все это уже сделал, но проблема осталась. В файле подключения к бд у меня стркоа:
Цитата

    mysql_query("SET NAMES 'utf-8'");

В файле где выводиться база:
Цитата

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru-ru" lang="ru-ru"> 
 <head> 
  <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
 </head> 

Цитата

<?php
  header("Content-type: text/html; charset=utf-8");


Цитата

php-скрипты сохраните в кодировке utf-8.

Вот это не понял как. Вроде сохраняю все как обычно в Notepad++.

Теперь такая проблема - Захожу на сайт, не вижу русские буквы.
PM MAIL   Вверх
enoff
Дата 18.9.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



Не знаю, как в notepad++, у меня vim, так что мои советы мало тут помогут smile 
Обычно в диалоге открытия файла можно указать кодировку.
Нажмите "Сохранить как...", тоже должна быть возможность указать кодировку.
В меню где-нибудь возможно поменять.
Иногда в строке состояния (внизу) можно поменять.
PM MAIL ICQ Skype GTalk   Вверх
bars80080
Дата 18.9.2010, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



это стандартная проблема при работе с phpmyadmin. эту систему очень часто не могут настроить в корректную работу с кодировками.
если ввод данных осуществляется не только через phpmyadmin, а с помощью самописного движка или некоторой CMS, то рекомендовал бы перейти на неё. это полезно ещё с той точки зрения, что можно кого-нибудь наделить правами, чтобы он уже вставлял данные. а в phpmyadmin опять же будет проблема, но уже с разграничениями прав

очень советую уйти от phpmyadmin, если есть возможность
PM MAIL WWW   Вверх
EasyTask
Дата 18.9.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Такой возможности к сожалению нет :(( Да тут не столько в PMA дело, сколько в связке браузер - mysql

если кодировка страницы cp1251 - Я вижу все кроме русских букв из базы
если кодировка страницы UTF-8 - Я вижу строки из базы, но не вижу остальных русских букв на сайте

Щас дотыкал стало вообще так выглядеть:
http://s40.radikal.ru/i090/1009/4d/07262abff2ab.jpg

Выходит что щас у меня вообще везде стоит UTF-8 и я имею:
- Не выводятся русские буквы из скрипта
- Не выводятся русские буквы из БД
- В БД посредством скрипта русские буквы не попадают

 smile как то абсурдно это все выглядит smile с ума уже сводит.
PM MAIL   Вверх
enoff
Дата 18.9.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



браузер ничего не знает о mysql.
Он даже ничего не знает о php.

забудьте про pma, все удалите и сделайте еще. Вставьте данные из своего скрипта. (обязательное условие - кодировка файла).
PM MAIL ICQ Skype GTalk   Вверх
EasyTask
Дата 18.9.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Что именно я должен сделать еще? Удалить БД или что?
PM MAIL   Вверх
enoff
Дата 18.9.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



EasyTask, БД удалять не нужно.
Создайте таблицу, укажите кодировку.
Добавьте скриптом данные в эту таблицу.
Прочитайте скриптом данные из этой таблицы и выведете.
Посмотрите результат.
PM MAIL ICQ Skype GTalk   Вверх
EasyTask
Дата 18.9.2010, 13:52 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Скриптом в базу данные на русском языке - не попадают.
Если их добавить вручную (через РМА) в РМА они выглядят корректно - на сайте в виде "?????"

В РМА я все вижу корректно и русккие буквы и добавлю значения на русском, все ок. А вот с сайта они не добавляются и не отображаются.
PM MAIL   Вверх
enoff
Дата 18.9.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



Цитата(EasyTask @  18.9.2010,  14:52 Найти цитируемый пост)
Скриптом в базу данные на русском языке - не попадают.

Вообще не попадают?

Цитата(enoff @  18.9.2010,  14:16 Найти цитируемый пост)
mysql_connect() or die(mysql_error());
mysql_query() or die(mysql_error());

Что выводит?
PM MAIL ICQ Skype GTalk   Вверх
EasyTask
Дата 18.9.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Совсем не попадают.

Код

    if (!$add_query)
    {
    echo mysql_error();
    }

Incorrect string value: '\xD1\xD0\xD0\xD1\xD0' for column 'name' at row 1


Это сообщение отредактировал(а) EasyTask - 18.9.2010, 14:14
PM MAIL   Вверх
enoff
Дата 18.9.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13



Код

SHOW CREATE TABLE `table`

? можно из pma.
Кодировка файла какая?
PM MAIL ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.