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

Форум MySQL

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

 

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

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

тема: в БД вместо русских букв, пишеться вопросительный знак
 
 автор: VikaRI   (31.10.2008 в 13:59)   письмо автору
 
 

Здравствуйте!
Возникла такая проблема: перенесла весь сайт на тестовый аккаунт, но в БД вместо русских букв, пишеться вопросительный знак.
При создании БД использовала кодировку latin1_swedish_c, а на хостинге сказали исправить на cp1251_general_ci. я когда закачивала Бд указала это в сравнении.
На хостинге говорят обратитесь к разработчику, но это же я его делала и не знаю как исправить.
Подскажите, пожалуйста, что я делаю не так. Как это исправить?

   
 
 автор: Root   (31.10.2008 в 14:10)   письмо автору
 
   для: VikaRI   (31.10.2008 в 13:59)
 

после установки соединения:
mysql_query("SET NAMES 'cp1251'");


а также полезно пользоваться этим

   
 
 автор: Trianon   (31.10.2008 в 14:30)   письмо автору
 
   для: VikaRI   (31.10.2008 в 13:59)
 

БД следует создать с кодировкой cp1251. В latin1 нет русских букв.
В принципе кодировку базы можно поменять и позже,но таблицы всё равно придется удалить и создать заново.
ALTER DATABASE db_name     CHARACTER SET cp1251     COLLATE cp1251_general_ci;

   
 
 автор: VikaRI   (31.10.2008 в 18:00)   письмо автору
 
   для: Trianon   (31.10.2008 в 14:30)
 

>БД следует создать с кодировкой cp1251. В latin1 нет русских букв.
>В принципе кодировку базы можно поменять и позже,но таблицы всё равно придется удалить и создать заново.
>
ALTER DATABASE db_name     CHARACTER SET cp1251     COLLATE cp1251_general_ci;

а куда добавить этот код?
действительно не получается изменить кодировку, хоть плач(
а таблицы уже наполнены данными!

   
 
 автор: Dead   (31.10.2008 в 18:12)   письмо автору
 
   для: VikaRI   (31.10.2008 в 18:00)
 

Там где ты в скрипте создаешь подключение к Базе.

   
 
 автор: VikaRI   (31.10.2008 в 18:22)   письмо автору
 
   для: Dead   (31.10.2008 в 18:12)
 

А можно просто скопировать данные из таблицы с кодировкой latin1 в таблицу с кодировкой cp1251
Огромный материал переделывать, все таблицы заполнялись 2 недели!

   
 
 автор: Trianon   (31.10.2008 в 18:17)   письмо автору
 
   для: VikaRI   (31.10.2008 в 18:00)
 

Что значит наполнены?
Вы же говорите, что Вы не видите русского текста?

   
 
 автор: VikaRI   (31.10.2008 в 18:24)   письмо автору
 
   для: Trianon   (31.10.2008 в 18:17)
 

я не вижу русского текста в тестовом аккаунте на хостинге, а на localhost ( у меня установлен Денвер) - все таблицы заполнялись при кодировке latin1 русскими буквами и все было чудесно

Когда просто меняю кодировку в таблице по полям, выдает ошибку:
БД phpsite - таблица articles на localhost

Ошибка

SQL-запрос :

ALTER TABLE `articles` CHANGE `title` `title` VARCHAR( 255 ) CHARACTER SET cp1251DEFAULT NULL

Ответ MySQL:
#1366 - Incorrect string value: '\xCA\xE0\xEA \xE7\xE0...' for column 'title' at row 1



А скопировать данные из таблицы с кодировкой latin1 в таблицу с кодировкой cp1251, не получается пишет, что скопировал, но таблица остается пустой.

   
 
 автор: Trianon   (31.10.2008 в 18:57)   письмо автору
 
   для: VikaRI   (31.10.2008 в 18:24)
 

>я не вижу русского текста в тестовом аккаунте на хостинге, а на localhost ( у меня установлен Денвер) - все таблицы заполнялись при кодировке latin1 русскими буквами и все было чудесно

Ваши таблицы заполнились символами из чужих языков, которые (символы) имеют те же коды что и русские буквы. если Вы считаете, что это чудесно, говорить больше не о чем.


С моей точки зрения, первое , чито Вам нужно сделать - это снять дамп, при чем убедиться, что он корректный и читабельный. Читабельный - значит содержимое всех текстовых полей в нем можно прочесть в редакторе. Корректный значит, что либо в нем не указана кодировка вообще, либо указанная совпадает с кодировкой самого дампа.

Второе - заново создать БД с указанием правлильной кодировки.

Третье - импортировать дамп.

Альтернативный вариант, который Вы сейчас пытаетесь проделать - поменять кодировку прямо у содержимого таблиц сопряжен с риском потерять данные вообще, и я б его делать не советовал.
Если физически кодировка измениться не должна, то сперва её меняют с кривой на промежуточную binary , а потом с binary на правильную. Но не имея дампа такое делать - повторяю - на свой страх и риск потерять вообще всё.


Независимо от того, каким образом база будет исправлена, в скрипт подключения к БД нужно будет поставить запрос на установку кодировки соединения. Только не SET NAMES , а
SET CHARACTER SET 'cp1251';

а дальше дело Ваше.

   
 
 автор: VikaRI   (31.10.2008 в 19:15)   письмо автору
 
   для: Trianon   (31.10.2008 в 18:57)
 

я совершенно не компетентна и прошу не судить строго я только учюсь.
скрипт подключения к БД <? $db = mysql_connect ("localhost","php","12345");
mysql_select_db("phpsite",$db);
SET CHARACTER SET 'cp1251'; ?>
Это так надо сделать?
И второй вопрос, от которого, думаю, вы поймете уровень моей некомпетентности - как снять дамп, при чем убедиться, что он корректный и читабельный?

   
 
 автор: Trianon   (31.10.2008 в 19:53)   письмо автору
43 Кб
 
   для: VikaRI   (31.10.2008 в 19:15)
 

Вот так.
<?php 
 $db 
mysql_connect ("localhost","php","12345");
  
mysql_select_db("phpsite",$db);
  
mysql_query("SET CHARACTER SET 'cp1251'",$db);
?>




В phpMyAdmin (входит в денвер) снять дамп можно в разделе Экспорт,
в вашем случае придется , вероятно, поставить режим
совместимости (SQL export compatibility) MYSQL40
Я выделил на скриншоте соответствующий пункт.

Если есть утилита mysqldump , можно применить её.

Проверить чем? Открыть как обычный текстовый файл.

   
 
 автор: VikaRI   (31.10.2008 в 20:36)   письмо автору
 
   для: Trianon   (31.10.2008 в 19:53)
 

у меня эта вкладка выглядит так. там нет режима
совместимости (SQL export compatibility) MYSQL40

   
 
 автор: VikaRI   (31.10.2008 в 20:42)   письмо автору
 
   для: VikaRI   (31.10.2008 в 20:36)
 

А картинка не прикрепляется

   
 
 автор: Trianon   (31.10.2008 в 20:42)   письмо автору
 
   для: VikaRI   (31.10.2008 в 20:36)
 

а сама база большая?

   
 
 автор: VikaRI   (31.10.2008 в 21:28)   письмо автору
135.7 Кб
 
   для: Trianon   (31.10.2008 в 20:42)
 

480 кб
прикрепился таки

   
 
 автор: Trianon   (31.10.2008 в 21:52)   письмо автору
 
   для: VikaRI   (31.10.2008 в 21:28)
 

а без этой опции не выходит?

версия MySQL какая?

Можете попробовать прикрепить архив с файлами базы (из каталога usr\local\mysql5\data\phpsite)
Только перед тем, как запаковывать файлы, нужно денвер остановить.

   
 
 автор: VikaRI   (31.10.2008 в 22:44)   письмо автору
 
   для: Trianon   (31.10.2008 в 21:52)
 

в текстовом файле - язык русский!

# phpMyAdmin SQL Dump
# version 2.5.6
# http://www.phpmyadmin.net
#
# Хост: localhost
# Время создания: Окт 31 2008 г., 21:39
# Версия сервера: 5.0.51
# Версия PHP: 5.2.4

# БД : `phpsite`


# --------------------------------------------------------

#
# Структура таблицы `articles`
#

CREATE TABLE `articles` (
  `id` int(6) NOT NULL auto_increment,
  `title` varchar(255) character set latin1 NOT NULL,
  `meta_k` varchar(255) character set latin1 NOT NULL,
  `meta_d` varchar(255) character set latin1 NOT NULL,
  `date` date NOT NULL,
  `description` text character set latin1 NOT NULL,
  `author` varchar(255) character set latin1 NOT NULL,
  `text` text character set latin1 NOT NULL,
  `rating` int(10) NOT NULL default '5',
  `q_vote` int(10) NOT NULL default '2',
  `view` int(7) NOT NULL,
  `mini_img` varchar(255) character set latin1 NOT NULL,
  `cat` int(7) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=138 ;

#
# Дамп данных таблицы `articles`
#

INSERT INTO `articles` VALUES и т.д.

Что дальше делать? нужно что-то менять в коде? и СПАСИБО за советы!

   
 
 автор: Trianon   (31.10.2008 в 22:48)   письмо автору
 
   для: VikaRI   (31.10.2008 в 22:44)
 

Это в комментариях язык русский. И это само по семе ничего не значит.

Важнее, какой язык в добавляемых данных ( в операторах INSERT INTO )

   
 
 автор: VikaRI   (31.10.2008 в 23:57)   письмо автору
 
   для: Trianon   (31.10.2008 в 22:48)
 

там тоже русский, все данные на русском.
Но после всех изменений и при просмотре на localhost - появились вместо текста вопросительные знаки.

   
 
 автор: Trianon   (01.11.2008 в 00:31)   письмо автору
 
   для: VikaRI   (31.10.2008 в 23:57)
 

>там тоже русский, все данные на русском.
То есть дамп целый? Очень хорошо.


>Но после всех изменений и при просмотре на localhost - появились вместо текста вопросительные знаки.

Что за изменения?
Что за просмотр локалхоста?
Опишите, пожалуйста, ситуацию подробнее.

Следующим шагом я предлагал создать пустую базу заново с правильными параметрами кодировки и сравнения.

Следующим - проимпортировать дамп.

И наконец - изменить скрипт так, чтобы соединение настраивалось на нужную кодировку.

До этого никаких изменений в БД, по-моему, не ожидалось.

   
 
 автор: VikaRI   (01.11.2008 в 00:36)   письмо автору
 
   для: Trianon   (01.11.2008 в 00:31)
 

но я сохранила всю БД до изменений и там русский. Закачать обратно попробовать или как?

   
 
 автор: Trianon   (01.11.2008 в 00:39)   письмо автору
 
   для: VikaRI   (01.11.2008 в 00:36)
 

Либо удалить базу и создать заново с корректной кодировкой.
Либо удалить таблицы и затем изменить кодировку БД (пустой)
На хостинге второе , вероятно, сделать проще.
После этого импортировать дамп.

   
 
 автор: VikaRI   (01.11.2008 в 10:30)   письмо автору
 
   для: Trianon   (01.11.2008 в 00:39)
 

а в дампе изменять это место
DEFAULT CHARSET=latin1
на
DEFAULT CHARSET=ср 1251
?

   
 
 автор: VikaRI   (01.11.2008 в 10:57)   письмо автору
 
   для: VikaRI   (01.11.2008 в 10:30)
 

Изменила и сервер выдал ошибкуОшибка в ZIP-архиве: CRC32 checksum is not equal with the value in header information.
а потом еще и так
Ошибка

Вероятно, SQL-запрос содержит ошибку. При наличии таковой, 
ниже будет выведена ошибка MySQL-сервера, облегчающая 
диагностику проблемы.
ERROR: Неправильный идентификатор @ 118
STR: 5.0.
SQL: # phpMyAdmin SQL Dump
# version 2.5.6
# http://www.phpmyadmin.net
#
CREATE TABLE `articles` (
  `id` int(6) NOT NULL auto_increment,
  `title` varchar(255) character set cp1251 NOT NULL,
  `meta_k` varchar(255) character set cp1251 NOT NULL,
  `meta_d` varchar(255) character set cp1251 NOT NULL,
  `date` date  NOT NULL,
  `description` text character set cp1251 NOT NULL,
  `author` varchar(255) character set cp1251 NOT NULL,
  `text` text character set cp1251 NOT NULL,
  `rating` int(10) NOT NULL default '5',
  `q_vote` int(10) NOT NULL default '2',
  `view` int(7) NOT NULL,
  `mini_img` varchar(255) character set cp1251 NOT NULL,
  `cat` int(7) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=138 ;# phpMyAdmin SQL Dump
CREATE TABLE `articles` (
  `id` int(6) NOT NULL auto_increment,
  `title` varchar(255) character set cp1251 NOT NULL,
  `meta_k` varchar(255) character set cp1251 NOT NULL,
  `meta_d` varchar(255) character set cp1251 NOT NULL,
  `date` date  NOT NULL,
  `description` text character set cp1251 NOT NULL,
  `author` varchar(255) character set cp1251 NOT NULL,
  `text` text character set cp1251 NOT NULL,
  `rating` int(10) NOT NULL default '5',
  `q_vote` int(10) NOT NULL default '2',
  `view` int(7) NOT NULL,
  `mini_img` varchar(255) character set cp1251 NOT NULL,
  `cat` int(7) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=138 ;# phpMyAdmin SQL Dump
CREATE TABLE `articles` (
  `id` int(6) NOT NULL auto_increment,
  `title` varchar(255) character set cp1251 NOT NULL,
  `meta_k` varchar(255) character set cp1251 NOT NULL,
  `meta_d` varchar(255) character set cp1251 NOT NULL,
  `date` date  NOT NULL,
  `description` text character set cp1251 NOT NULL,
  `author` varchar(255) character set cp1251 NOT NULL,
  `text` text character set cp1251 NOT NULL,
  `rating` int(10) NOT NULL default '5',
  `q_vote` int(10) NOT NULL default '2',
  `view` int(7) NOT NULL,
  `mini_img` varchar(255) character set cp1251 NOT NULL,
  `cat` int(7) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=138 ;

   
 
 автор: ronin80   (01.11.2008 в 11:00)   письмо автору
 
   для: VikaRI   (01.11.2008 в 10:57)
 

какой сервер? Mysql?

   
 
 автор: VikaRI   (01.11.2008 в 11:19)   письмо автору
 
   для: ronin80   (01.11.2008 в 11:00)
 

>какой сервер? Mysql?
да
но эти ошибки выдает на хостинге, а в своем Денвере, я вообще в пустую таблицу не могу ничего импортировать.

   
 
 автор: Trianon   (01.11.2008 в 11:31)   письмо автору
 
   для: VikaRI   (01.11.2008 в 10:30)
 

DEFAULT CHARSET=cp1251

кроме того нужно удалить все спецификации character set latin1 в объявлениях полей всех таблиц .

   
 
 автор: VikaRI   (01.11.2008 в 11:43)   письмо автору
 
   для: Trianon   (01.11.2008 в 11:31)
 

может character set latin1 заменять на character set ср1251?
При импорте файла какую кодировку файла отмечать utf8?

   
 
 автор: Trianon   (01.11.2008 в 12:22)   письмо автору
 
   для: VikaRI   (01.11.2008 в 11:43)
 

Ошибки ляпаем.
У Вас две строки образовались перед CREATE TABLE

  `meta_k` varchar(255)  NOT NULL,
  `text` text  NOT NULL,
CREATE TABLE `articles` (
  `id` int(6) NOT NULL auto_increment,
  `title` varchar(255)  NOT NULL,
  `meta_k` varchar(255)  NOT NULL,
  `meta_d` varchar(255)  NOT NULL,
  `date` date  NOT NULL,

строки явно скопированы из тела оператора по ошибке.

Насчет поменять на cp1251 вместо того чтоб удалить - разницы никакой, поскольку умалчиваемая кодировка - cp1251

Кодировку при импорте нужно выставить такую, в которой получен текст файла с дампом.
В какой кодировке он у Вас - мне отсюда не видно.
Либо utf8 либо cp1251

   
 
 автор: VikaRI   (01.11.2008 в 12:33)   письмо автору
 
   для: Trianon   (01.11.2008 в 12:22)
 

я уже ее сама нашла)
а где посмотреть кодировку при импорте?
И все равно выдает ошибку

   
 
 автор: Trianon   (01.11.2008 в 12:42)   письмо автору
 
   для: VikaRI   (01.11.2008 в 12:33)
 

#1050 - Table 'articles' already exists
указананя таблица уже создана.

Импорт должен выполняться в пустую базу.

   
 
 автор: VikaRI   (01.11.2008 в 12:49)   письмо автору
 
   для: Trianon   (01.11.2008 в 12:42)
 

УРРРРРА!!!!
даже не знаю как вас благодарить за советы и потраченное на меня время!!!
Огромнейшее СПАСИБИЩЕ!!!!! Ну просто слов нет - так счастлива!!!!

   
 
 автор: Trianon   (01.11.2008 в 12:52)   письмо автору
 
   для: VikaRI   (01.11.2008 в 12:49)
 

-

   
Rambler's Top100
вверх

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