Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2010, 05:37   #1
DRUG_ADDICT
Пользователь
 
Аватар для DRUG_ADDICT
 
Регистрация: 04.02.2008
Сообщений: 19
По умолчанию Нарушилась кодировка в БД MySQL > регистрозависимость поиска по русским символам

есть БД:
запрос show variable; показывает:

Код:
character_set_client = utf8
character_set_connection =  utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results = utf8
character_set_server = utf8
character_set_system = utf8
collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci
делал в putty (SSH)...
*********************************** **
ПЕРВЫЙ ВАРИАНТ:
когда выполняю запрос в php (сам php файл в UTF-8):

mysql_query("INSERT INTO `database`.`table` (`text`) VALUES ('Привет');");

в БД записывается это: привет < смотрю через phpMyAdmin.
на странице (сам файл страницы в UTF-8 так же установлен content="text/html; charset=utf-8") вывожу это, вижу нормальный русский текст, тобишь "Привет".


ВТОРОЙ ВАРИАНТ:
делаю "насильно" после соединения с БД:
mysql_query("SET names 'utf8' COLLATE 'utf8_general_ci'");
и выполняю тот же выше приведенный запрос:
mysql_query("INSERT INTO `database`.`table` (`text`) VALUES ('Привет');");

в БД записывается слово "Привет" < смотрю через phpMyAdmin. вывожу это на страницу, вижу нормальный русский текст... в то время как то что я записывал ранее выводится уже как привет

*********************************** **
объясните мне пожалуйста почему так происходит при ПЕРВОМ ВАРИАНТЕ?
как перекодировать БД если туда всё записано по ПЕРВОМУ ВАРИАНТУ - вернее, объясните сам алгоритм, что на что кодировать?
есть альтернатива перекодированию?

PS. модуль php:
iconv - есть;
php-mbstring - нету, возможности установить - нету;


- для чего это? ответ: по первому варианту в БД с установленной utf8_general_ci поиск русских символов регистроЗАВИСИМ, когда по ВТОРОМУ ВАРИАНТУ поиск регистроНЕзависим.

огромное спасибо за ранее!
DRUG_ADDICT вне форума Ответить с цитированием
Старый 08.01.2010, 00:24   #2
DRUG_ADDICT
Пользователь
 
Аватар для DRUG_ADDICT
 
Регистрация: 04.02.2008
Сообщений: 19
По умолчанию

идея: рас браузер по ПЕРВОМУ ВАРИАНТУ всё отображается нормально, то наверно есть и способ всё оттуда вытащить в таком виде который мы наблюдаем на странице (ПЕРВЫЙ ВАРИАНТ), а затем уже нормально перелапатить БД в UTF-8 - т.к. русские символы UTF-8 в среде cp1251 будут отображаться как символы + русские буквы, сейчас же мы видим символы + латинские буквы - это на лицо неверная кодировка, как вот её вернуть в нормальное состояние не понятно.

понятно что точно не так:
*символы + латинские буквы (utf8) > конвертирование > символы + русские буквы (utf8)*

тут наверно скорее как я писал вышет так будет:
*символы + латинские буквы (utf8) > конвертирование > cp1251*
-- но вот КАК?!
DRUG_ADDICT вне форума Ответить с цитированием
Старый 13.01.2010, 11:33   #3
DRUG_ADDICT
Пользователь
 
Аватар для DRUG_ADDICT
 
Регистрация: 04.02.2008
Сообщений: 19
По умолчанию

проблема решена!

оказывается по умолчанию кодировка соединения и т.д.и т.п. была:
Код:
 ...
| character_set_client            | latin1
| character_set_connection        | latin1
| character_set_database          | utf8
| character_set_filesystem        | binary
| character_set_results           | latin1
| character_set_server            | latin1
| character_set_system            | utf8
| character_sets_dir              | /usr/share/mysql/charsets/
| collation_connection            | latin1_swedish_ci
| collation_database              | utf8_general_ci
| collation_server                | latin1_swedish_ci  
 ...
по этому сами данные были в utf8, а метаданные таблички говорили, что она в
latin1, и соединение в latin1. короче, всё экспортировал так:
ssh:~ # mysqldump --default-character-set=latin1 -u root -p -h localhost -B database | sed 's/latin1/utf8/' > /home/ssh/dump.sql
теперь русский текст отображаться нормально, далее залил в бд этот бекап и вуууоля
DRUG_ADDICT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск строк по символам в Memo Nocturnal Помощь студентам 2 15.12.2009 17:33
База данных MySQL и кодировка! nikolai_P SQL, базы данных 3 17.11.2009 22:50
Кодировка в MySQL и Delphi Droid БД в Delphi 2 18.06.2009 00:08
Проблема с русским ponchikpk Паскаль, Turbo Pascal, PascalABC.NET 12 22.05.2009 18:39
Как в RichEdit обращаться к символам Lissisa Компоненты Delphi 2 19.02.2009 08:01