|
|
|
| Здравствуйте!
Возникла такая проблема: перенесла весь сайт на тестовый аккаунт, но в БД вместо русских букв, пишеться вопросительный знак.
При создании БД использовала кодировку latin1_swedish_c, а на хостинге сказали исправить на cp1251_general_ci. я когда закачивала Бд указала это в сравнении.
На хостинге говорят обратитесь к разработчику, но это же я его делала и не знаю как исправить.
Подскажите, пожалуйста, что я делаю не так. Как это исправить? | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 13:59)
| | после установки соединения:
mysql_query("SET NAMES 'cp1251'");
|
а также полезно пользоваться этим | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 13:59)
| | БД следует создать с кодировкой cp1251. В latin1 нет русских букв.
В принципе кодировку базы можно поменять и позже,но таблицы всё равно придется удалить и создать заново.
ALTER DATABASE db_name CHARACTER SET cp1251 COLLATE cp1251_general_ci;
|
| |
|
|
|
|
|
|
|
для: Trianon
(31.10.2008 в 14:30)
| | >БД следует создать с кодировкой cp1251. В latin1 нет русских букв.
>В принципе кодировку базы можно поменять и позже,но таблицы всё равно придется удалить и создать заново.
>
ALTER DATABASE db_name CHARACTER SET cp1251 COLLATE cp1251_general_ci;
|
а куда добавить этот код?
действительно не получается изменить кодировку, хоть плач(
а таблицы уже наполнены данными! | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 18:00)
| | Там где ты в скрипте создаешь подключение к Базе. | |
|
|
|
|
|
|
|
для: Dead
(31.10.2008 в 18:12)
| | А можно просто скопировать данные из таблицы с кодировкой latin1 в таблицу с кодировкой cp1251
Огромный материал переделывать, все таблицы заполнялись 2 недели! | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 18:00)
| | Что значит наполнены?
Вы же говорите, что Вы не видите русского текста? | |
|
|
|
|
|
|
|
для: 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, не получается пишет, что скопировал, но таблица остается пустой. | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 18:24)
| | >я не вижу русского текста в тестовом аккаунте на хостинге, а на localhost ( у меня установлен Денвер) - все таблицы заполнялись при кодировке latin1 русскими буквами и все было чудесно
Ваши таблицы заполнились символами из чужих языков, которые (символы) имеют те же коды что и русские буквы. если Вы считаете, что это чудесно, говорить больше не о чем.
С моей точки зрения, первое , чито Вам нужно сделать - это снять дамп, при чем убедиться, что он корректный и читабельный. Читабельный - значит содержимое всех текстовых полей в нем можно прочесть в редакторе. Корректный значит, что либо в нем не указана кодировка вообще, либо указанная совпадает с кодировкой самого дампа.
Второе - заново создать БД с указанием правлильной кодировки.
Третье - импортировать дамп.
Альтернативный вариант, который Вы сейчас пытаетесь проделать - поменять кодировку прямо у содержимого таблиц сопряжен с риском потерять данные вообще, и я б его делать не советовал.
Если физически кодировка измениться не должна, то сперва её меняют с кривой на промежуточную binary , а потом с binary на правильную. Но не имея дампа такое делать - повторяю - на свой страх и риск потерять вообще всё.
Независимо от того, каким образом база будет исправлена, в скрипт подключения к БД нужно будет поставить запрос на установку кодировки соединения. Только не SET NAMES , а
SET CHARACTER SET 'cp1251';
а дальше дело Ваше. | |
|
|
|
|
|
|
|
для: Trianon
(31.10.2008 в 18:57)
| | я совершенно не компетентна и прошу не судить строго я только учюсь.
скрипт подключения к БД <? $db = mysql_connect ("localhost","php","12345");
mysql_select_db("phpsite",$db);
SET CHARACTER SET 'cp1251'; ?>
Это так надо сделать?
И второй вопрос, от которого, думаю, вы поймете уровень моей некомпетентности - как снять дамп, при чем убедиться, что он корректный и читабельный? | |
|
|
|
|
 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 , можно применить её.
Проверить чем? Открыть как обычный текстовый файл. | |
|
|
|
|
|
|
|
для: Trianon
(31.10.2008 в 19:53)
| | у меня эта вкладка выглядит так. там нет режима
совместимости (SQL export compatibility) MYSQL40 | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 20:36)
| | А картинка не прикрепляется | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 20:36)
| | а сама база большая? | |
|
|
|
|
 135.7 Кб |
|
|
для: Trianon
(31.10.2008 в 20:42)
| | 480 кб
прикрепился таки | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 21:28)
| | а без этой опции не выходит?
версия MySQL какая?
Можете попробовать прикрепить архив с файлами базы (из каталога usr\local\mysql5\data\phpsite)
Только перед тем, как запаковывать файлы, нужно денвер остановить. | |
|
|
|
|
|
|
|
для: 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 и т.д.
|
Что дальше делать? нужно что-то менять в коде? и СПАСИБО за советы! | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 22:44)
| | Это в комментариях язык русский. И это само по семе ничего не значит.
Важнее, какой язык в добавляемых данных ( в операторах INSERT INTO ) | |
|
|
|
|
|
|
|
для: Trianon
(31.10.2008 в 22:48)
| | там тоже русский, все данные на русском.
Но после всех изменений и при просмотре на localhost - появились вместо текста вопросительные знаки. | |
|
|
|
|
|
|
|
для: VikaRI
(31.10.2008 в 23:57)
| | >там тоже русский, все данные на русском.
То есть дамп целый? Очень хорошо.
>Но после всех изменений и при просмотре на localhost - появились вместо текста вопросительные знаки.
Что за изменения?
Что за просмотр локалхоста?
Опишите, пожалуйста, ситуацию подробнее.
Следующим шагом я предлагал создать пустую базу заново с правильными параметрами кодировки и сравнения.
Следующим - проимпортировать дамп.
И наконец - изменить скрипт так, чтобы соединение настраивалось на нужную кодировку.
До этого никаких изменений в БД, по-моему, не ожидалось. | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2008 в 00:31)
| | но я сохранила всю БД до изменений и там русский. Закачать обратно попробовать или как? | |
|
|
|
|
|
|
|
для: VikaRI
(01.11.2008 в 00:36)
| | Либо удалить базу и создать заново с корректной кодировкой.
Либо удалить таблицы и затем изменить кодировку БД (пустой)
На хостинге второе , вероятно, сделать проще.
После этого импортировать дамп. | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2008 в 00:39)
| | а в дампе изменять это место на ? | |
|
|
|
|
|
|
|
для: 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 ;
|
| |
|
|
|
|
|
|
|
для: VikaRI
(01.11.2008 в 10:57)
| | какой сервер? Mysql? | |
|
|
|
|
|
|
|
для: ronin80
(01.11.2008 в 11:00)
| | >какой сервер? Mysql?
да
но эти ошибки выдает на хостинге, а в своем Денвере, я вообще в пустую таблицу не могу ничего импортировать. | |
|
|
|
|
|
|
|
для: VikaRI
(01.11.2008 в 10:30)
| | DEFAULT CHARSET=cp1251
кроме того нужно удалить все спецификации character set latin1 в объявлениях полей всех таблиц . | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2008 в 11:31)
| | может character set latin1 заменять на character set ср1251?
При импорте файла какую кодировку файла отмечать utf8? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2008 в 12:22)
| | я уже ее сама нашла)
а где посмотреть кодировку при импорте?
И все равно выдает ошибку | |
|
|
|
|
|
|
|
для: VikaRI
(01.11.2008 в 12:33)
| | #1050 - Table 'articles' already exists
указананя таблица уже создана.
Импорт должен выполняться в пустую базу. | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2008 в 12:42)
| | УРРРРРА!!!!
даже не знаю как вас благодарить за советы и потраченное на меня время!!!
Огромнейшее СПАСИБИЩЕ!!!!! Ну просто слов нет - так счастлива!!!! | |
|
|
|
|
|
|
|
для: VikaRI
(01.11.2008 в 12:49)
| | - | |
|
|
|