Автор Тема: Проблема с кодировками PHP + MySQL + phpMyAdmin  (Прочитано 18034 раз)

0 Пользователей и 1 Гость просматривают эту тему.

int77

  • Newbie
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Проблема с кодировками PHP + MySQL + phpMyAdmin
« Ответ #4 : 27 Август 2009 Четверг 15:45:42 »
У меня получается такая штука была:
Моя таблица в MySQL была в кодировке UTF-8.
WEB форма с которой работает пользователь в кодировке cp1251, WEB форму переводить в UTF-8 не хотелось, т.к. мне намного удобнее работать с кодировкой cp1251.

Заголовок WEB формы:
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
   <title>Test</title>
</head>


А в самом PHP коде пришлось только 3 строчки добавить!!!  :)

//Данные в таблице MySQL храним в UTF-8, чтобы небыло проблем при просмотре из phpMyAdmin
mysql_query("set character_set_connection=utf8;",$link);

//Данные которые поступают из WEB формы получаю в кодировке cp1251
mysql_query("set character_set_client=cp1251;",$link);

//Данные которые поступают в WEB форму для пользователя отдаю в кодировке cp1251
mysql_query("set character_set_results=cp1251",$link);

programmist, cпасибо большое, очень выручил!!! :)
« Последнее редактирование: 27 Август 2009 Четверг 15:49:22 от int77 »

programmist

  • Newbie
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Проблема с кодировками PHP + MySQL + phpMyAdmin
« Ответ #3 : 27 Август 2009 Четверг 13:16:34 »
У тебя подозреваю после отправки данных из WEB формы, происходит перекодировка из одной кодировки в другую и потом уже данные сохраняются в MySQL с испорченной кодировкой или сам MySQL конвертирует. Посмотри еще какие настройки в твоем MySQL, в phpMyAdmin на закладке "SQL" выполни этот запрос SHOW VARIABLES и увидишь все текущие настройки.
И попробуй вот это:

После соединения с MySQL:
$link = mysql_connect ($Server, $Username, $Password) or die ("Ошибка соединения с MySQL.".mysql_error());

Попробуй, поиграться вот с этими коммандами:
mysql_query("set character_set_connection=utf8;",$link);
mysql_query("set character_set_client=utf8;",$link);
mysql_query("set character_set_results=utf8",$link);
mysql_query("set names utf8",$link);

или чередуй эти комманды с другими кодировками: utf8 , cp1251

Вот краткое описание того, что они делают:
character_set_connection - указывает, в какую кодировку следует преобразовать данные полученые от клиента перед выполнением запроса
character_set_client - указывает, в какой кодировке будут поступать данные от клиента
character_set_results - указывает серверу не необходимость перекодировать результаты запроса в определенную кодировку перед выдачей их клиенту
set names - Если запрос и данные в таблице находятся в одинаковой кодировке и перекодировка резултата не требуется, то достаточно выполнить только это

int77

  • Newbie
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Проблема с кодировками PHP + MySQL + phpMyAdmin
« Ответ #2 : 27 Август 2009 Четверг 12:33:24 »
Если я меняю кодировку на сайте с помощью тега:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Получаются следующие глюки с кодировками:
kod3.jpg - Это то что я вижу в phpMyAdmin, тут уже кракозябры другого вида появились, хотя текст такой же добавил
kod4.jpg  - Это то что отображается на моем сайте

Пробовал менять в поле "Name" тип varchar на char,text,varbinary - не помогает, еще и хуже.
Пробовал менять "Сравнение" на другие кодировки, тоже глюки с русскими буквами.

Текст запроса на создание таблицы такой:
$query="CREATE TABLE test_tab (
 id int(10) unsigned NOT NULL AUTO_INCREMENT,
 user_id int(11) NOT NULL,
 Name varchar(100) NOT NULL DEFAULT '',
 PRIMARY KEY (id)
 )ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$result = mysql_query($query);

Помогите, пожалуйста разобраться с кодировками, очень нужно! ;)
« Последнее редактирование: 27 Август 2009 Четверг 12:47:49 от int77 »

int77

  • Newbie
  • *
  • Сообщений: 8
    • Просмотр профиля
Проблема с кодировками PHP + MySQL + phpMyAdmin
« Ответ #1 : 27 Август 2009 Четверг 12:26:15 »
Создал свою таблицу в MySQL, на PHP написал скрипт который добавляет данные в мою таблицу. Все работает, но потом обратил внимание, что когда я просматриваю таблицу в phpMyAdmin, у меня там вместо русских букв всякие иероглифы и кракозябры. Хотя если я данные получаю из PHP скрипта то глюков с кодировками нет. Данные в таблице MySQL хранятся в кодировке uft-8, а данные которые поступают из WEB формы в кодировке Кириллица (Windows). Пробовал менять кодировку WEB формы на Юникод (UTF-8) - тоже самое, глюки с кодировкой. Для наглядности прикрепляю скриншоты.
kod5.jpg - Структура моей таблицы, поле "Name": Тип - varchar, сравнение - utf8_general_ci
kod2.jpg - Это то что отображается на моем сайте, тут с кодировками все в порядке
kod1.jpg - Это то что отображается в phpMyAdmin, тут с кодировками проблемы
« Последнее редактирование: 27 Август 2009 Четверг 12:30:46 от int77 »