Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нарушилась кодировка
 
 автор: DRUG1   (10.01.2010 в 06:43)   письмо автору
 
 

есть БД:
запрос 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 ('Привет');");

в БД записывается это: &#208;&#191;&#209;€&#208;&#184;&#208;&#178;&#208;µ&#209;‚ < смотрю через 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. вывожу это на страницу, вижу нормальный русский текст... в то время как то что я записывал ранее выводится уже как &#208;&#191;&#209;€&#208;&#184;&#208;&#178;&#208;µ&#209;‚

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

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

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

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

  Ответить  
 
 автор: DRUG1   (10.01.2010 в 06:45)   письмо автору
 
   для: DRUG1   (10.01.2010 в 06:43)
 

ps. блин что то у вас на форуме не отоброжается то что я вижу у себя, тут как "&#208;&#184;&#2" .... хммм....

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

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

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

  Ответить  
 
 автор: .heed   (10.01.2010 в 12:24)
 
   для: DRUG1   (10.01.2010 в 06:45)
 

Может SHOW CREATE TABLE `ИмяТаблицы`
покажет почему так

при
>character_set_connection = utf8
вроде SET names 'utf8' по умолчанию
, если нет ещё каких-то запросов типа init-connect в my. ini

  Ответить  
 
 автор: DRUG1   (10.01.2010 в 20:23)   письмо автору
 
   для: .heed   (10.01.2010 в 12:24)
 

>Может SHOW CREATE TABLE `ИмяТаблицы`
>покажет почему так
вот:
mysql> SHOW CREATE TABLE text;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| text | CREATE TABLE `text` (
`ID` int(11) NOT NULL auto_increment,
`text` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

>при
>>character_set_connection = utf8
>вроде SET names 'utf8' по умолчанию
>, если нет ещё каких-то запросов типа init-connect в my. ini
нет, нету, да и даже если было бы не в этом вопрос, в бд уже целый год так записывается русский текст, надо просто не знаю перековертить или чтонеть хз =( правда уже всё возможное наверно пробовал... =(((

  Ответить  
 
 автор: Trianon   (11.01.2010 в 03:18)   письмо автору
 
   для: .heed   (10.01.2010 в 12:24)
 

по умолчанию - latin1

  Ответить  
 
 автор: DRUG1   (13.01.2010 в 11:35)   письмо автору
 
   для: DRUG1   (10.01.2010 в 06:43)
 

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

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования