Нарушилась кодировка в БД Mysql > регистрозависимость поиска по рус

  • Автор темы DRUGADDICT
  • Дата начала
D

DRUGADDICT

#1
есть БД:
запрос 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 поиск русских символов регистроЗАВИСИМ, когда по ВТОРОМУ ВАРИАНТУ поиск регистроНЕзависим.

огромное спасибо за ранее!
 
D

DRUGADDICT

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

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

тут наверно скорее как я писал вышет так будет:
*символы + латинские буквы (utf8) > конвертирование > cp1251*
-- но вот КАК?! :what?:
 
D

DRUGADDICT

#3
проблема решена! :KillMe:

оказывается по умолчанию кодировка соединения и т.д.и т.п. была:
Код:
 ...
| 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
теперь русский текст отображаться нормально, далее залил в бд этот бекап и вуууоля :cool: