51

Re: Смена кодировки базы в phpMyAdmin

есть дамп базы в cp1251, нужно сконвертировать в utf-8.
iconv на чём то спотыкается, поэтому конвертирует только с ключём -s, что меня не устраивает.
как правильно сконвертировать базу в этом случае и не нарваться на то на что уже нарвался с iconv?

Отредактировано Alex1985 (2009-05-30 22:39:37)

52

Re: Смена кодировки базы в phpMyAdmin

Alex1985
Не могу себе представить из-за чего может быть проблема при конвертации из cp1251 в utf-8 с помощью iconv.
Если вам надо импортировать дамп в phpMyAdmin, чтобы таблицы стали в кодировке utf-8 - можно не конвертировать сам дамп, а только поменять кодировки самих таблиц в нем, то есть: cp1251 везде меняем на utf8 (включая сравнения полей, если они прописаны). При импорте в phpMyAdmin следует выбрать верную кодировку дампа, самого файла.

ВКонтакте Facebook Twitter

53

Re: Смена кодировки базы в phpMyAdmin

поискал в дампе "cp1251", нету! но он точно cp1251, только при этой кодировке русский текст в нём читабелен. подозреваю что указание кодировки в дампе отсутствует.
iconv падает судя по всему на записях вроде

[img align=left]C:\\Documents and Settings\\XXX\\Мои документы\\Мои рисунки\\avatar\\Винни.gif[/img]

то есть мне нужно просто импортировать дамп, и при импорте выбрать cp1251 (дефолтная кодировка mysql, utf-8)?

Отредактировано Alex1985 (2009-05-30 23:08:36)

54

Re: Смена кодировки базы в phpMyAdmin

Alex1985
Если в дампе кодировки не указаны, то таблицы будут созданы в той кодировке, в которой создана БД. Поэтому создайте БД в нужной вам кодировке и импортируйте дамп. Как я понимаю, на странице импорта в phpMyAdmin вам следует выбрать кодировку файла windows-1251. Если таблицы нужны в utf-8, то создайте БД в utf-8 соответственно (сравнение utf8_general_ci).

ВКонтакте Facebook Twitter

55

Re: Смена кодировки базы в phpMyAdmin

спасибо, вроде получилось. скоро испытаю smile

испытания прошли успешно, спасибо ещё раз smile

Отредактировано Alex1985 (2009-06-01 22:43:51)

56

Re: Смена кодировки базы в phpMyAdmin

ситуация такая, на старом копе(венда) писал сайт(с 0), все документы кодировка cp1251, база была на денвере тоже 1251, сейчас купил новый комп установил кубунту и LAMP на него, база данных utf8, при открытии файла статические данные нормально отображаются а данные из БД отображаются так: Народного ополчения, в phpmyadmin при сопоставлении соединения cp1251 данные отображабтся нормадльно, SET NAMES не помогает, какая команда выставляет сопоставление соединения? давно с этим сталкивался но не помню как это делается, есть нечто подобное SET NAMES но выставляет именно сопоставление соединения для текущего сеанса

57

Re: Смена кодировки базы в phpMyAdmin

Device
В конфигурационный файл MySQL (my.cnf) добавьте/отредактируйте в разделе [mysql] строку:
default-character-set=cp1251

Так же добавьте/отредактируйте в разделе [mysqld] две строки:
init-connect="SET NAMES cp1251"
default-character-set=cp1251

Именно SET NAMES устанавливает кодировку соединения с MySQL, как и другие параметры, касающиеся кодировки.

Обратите внимание на кодировки таблиц, они везде должны быть cp1251 и в phpMyAdmin данные в кириллице должны выглядеть нормально. Судя по крякозябам вида: Народного, в таблицах данные у вас находятся в utf8. Возможно был неверно осуществлен импорт, либо экспорт дампа.

ВКонтакте Facebook Twitter

58

Re: Смена кодировки базы в phpMyAdmin

ну когда я просматриваю содержимое таблиц в PMA там все типтоп

59

Re: Смена кодировки базы в phpMyAdmin

Device
А сами таблицы в phpMyAdmin какие кодировки имеют?

ВКонтакте Facebook Twitter

60

Re: Смена кодировки базы в phpMyAdmin

cp1251_general_ci

61

Re: Смена кодировки базы в phpMyAdmin

Device
Надо установить кодировку соединения с MySQL в cp1251. Выше я уже написал как это сделать.

ВКонтакте Facebook Twitter

62

Re: Смена кодировки базы в phpMyAdmin

#1115 - Unknown character set: 'cp1251_general_ci'
Запрос: ALTER DATABASE `base1` DEFAULT CHARACTER SET cp1251_general_ci
Вот такие дела....

63

Re: Смена кодировки базы в phpMyAdmin

Всё понял, у меня синтаксис другой:
ALTER DATABASE database1 DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci

64

Re: Смена кодировки базы в phpMyAdmin

У меня вот такая задача: кодировка на хостинге latin1_swedish_ci, а кодировка в базе cp1251. Делал что тут написано, но недотумкаю никак.
Пункты выпадающего списка (типа "район", "город"), в который добавляем запись, пишет добавлено - ОК, отображается в списке в админ меню как  ?????, объект же добавленный вновь, не отображается на сайте.
Помогите, плз. Спасибо.

65

Re: Смена кодировки базы в phpMyAdmin

azimut
В скрипте, сразу после функции mysql_connect, добавьте строку устанавливающую кодировку соединения с MySQL.

mysql_query('SET NAMES cp1251');

ВКонтакте Facebook Twitter

66

Re: Смена кодировки базы в phpMyAdmin

Большое! нет, ОГРОМНОЕ спасибо!!!!

67

Re: Смена кодировки базы в phpMyAdmin

Не буду оригинальным у меня вопрос про отображение '??????' вместо русского языка на веб странице. Кодировка страницы win-1251. В phpmyadmin русский тескт видно правильно, cp1251_general_ci у базы данных и таблиц.

в пхп скрипте стоит mysql_query('SET NAMES cp1251'); - не помогает

Результат выполнения команды SHOW GLOBAL VARIABLES LIKE 'char%';
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
character_sets_dir    /usr/share/mysql/charsets/

что следует еще поменять ? доступа к my.ini/my.cnf нет.
Спасибо

68

Re: Смена кодировки базы в phpMyAdmin

neotan
Не используйте root, создайте отдельного пользователя и наделите его только необходимыми правами (не выставляйте права из раздела "Админитсрирование").

ВКонтакте Facebook Twitter

69

Re: Смена кодировки базы в phpMyAdmin

Доброго времени суток! Прошу Вашей помощи, проблема возникла после смены хостера и заключается в следующем... Есть скрипт, который должен обновлять базу из файла *.csv (если потребуется, код выложу). На старом хостинге он работал без проблем, при смене возникла такая проблема: в базу не добавляется кириллица, начинающаяся с большой буквы. Пример: должно быть "Столица нашей Родины - Москва", а добавляется " нашей Родины - Москва". Если одно слово с большой буквы, то оно попросту не добавляется. Это относится только к кириллице. English, цифры и знаки препинания - все в порядке. phpMyAdmin при нажатии на имя базы выводит:

Таблиц: 26       Всего      321,163       MyISAM       cp1251_general_ci     28.7 МБ (не сильно разбираюсь, видимо это кодировка и сравнение базы по умолчанию)

А таблицы и столбцы, в которые должны добавляться данные этим скриптом в cp1251_general_cs. Простое изменение таблиц и столбцов через phpMyAdmin на cp1251_general_ci ничего не дает sad Помогите решить проблему. Являясь абсолютным новичком в этом деле, прошу как можно подробнее. Спасибо.

70

Re: Смена кодировки базы в phpMyAdmin

3001
Не сталкивался с таким. Покажите скрипт, может по нему что-то будет ясно.

ВКонтакте Facebook Twitter

71

Re: Смена кодировки базы в phpMyAdmin

Вот
[spoiler]<?}//$parse!="go"








if($parse=="go"){

if(move_uploaded_file($_FILES['f']['tmp_name'],"/tmp/temp.csv"))
{echo "<p>файл успешно загружен</p>!";}
else {die("ошибка с загрузкой файла");}


mysql_query("DELETE FROM kino_films WHERE filmType='$type'");


$fp = fopen ("/tmp/temp.csv","r");

$r = 1;

while ($data = fgetcsv ($fp, 3000, ";")) {

if($data[0]>0){

    while (list ($key, $val) = each ($data)) {
    $data[$key]=str_replace("'","\’",$data[$key]);
    $data[$key]=trim($data[$key]);
    }
   
if($type=="mpeg4"){
$cell["filmID"]=$data[0];
$cell["filmName"]=$data[1];
$cell["filmOname"]=$data[2];
$cell["filmTranslate"]=$data[3];
$cell["filmTime"]=$data[4];
$cell["filmSize"]=$data[5];
$cell["filmScreen"]=$data[6];
$cell["filmGenre"]=$data[7];
$cell["filmYear"]=$data[8];
$cell["filmCountry"]=$data[9];
$cell["filmReggiser"]=$data[10];
$people=$data[11];
$cell["filmDescr"]=$data[12];
$cell["filmSpecial"]=$data[13];
$cell["filmDvdnumber"]=$data[14];
}

if($type=="dvd"){
$cell["filmID"]=$data[0];
$cell["filmName"]=$data[1];
$cell["filmOname"]=$data[2];
$cell["filmTranslate"]=$data[3];
$cell["filmTime"]=$data[4];
$cell["filmSize"]=$data[5];
$cell["filmScreen"]=$data[13];
$cell["filmGenre"]=$data[6];
$cell["filmYear"]=$data[7];
$cell["filmCountry"]=$data[8];
$cell["filmReggiser"]=$data[9];
$people=$data[10];
$cell["filmDescr"]=$data[11];
$cell["filmSpecial"]=$data[12];
$cell["filmDvdnumber"]="";
$cell["filmPrim"]=$data[13];
}

if($type=="hdtv"){
$cell["filmID"]=$data[0];
$cell["filmName"]=$data[1];
$cell["filmOname"]=$data[2];
$cell["filmTranslate"]=$data[3];
$cell["filmTime"]=$data[4];
$cell["filmSize"]=$data[5];
$cell["filmScreen"]=$data[6];
$cell["filmGenre"]=$data[7];
$cell["filmYear"]=$data[8];
$cell["filmCountry"]=$data[9];
$cell["filmReggiser"]=$data[10];
$people=$data[11];
$cell["filmDescr"]=$data[12];
$cell["filmSpecial"]=$data[13];
$cell["filmDvdnumber"]="";
$cell["filmPrim"]=$data[14];
}

$sententes=explode(". ",$cell["filmDescr"]);

$best=300;
$descr=$sententes[0];

if(strlen($descr< 150) ){

for($i=1;$len>$best;$i++){

$descr.=$sententes[$i];
$len=strlen($descr);

}
}

$cell["filmSdescr"]=$descr;

    $actor=explode(",",$people);
    $actor1=trim($actor[0]);
    $actor2=trim($actor[1]);
    $actor3=trim($actor[2]);




        if($type=="mpeg4"){

        $genres[$cell["filmGenre"]]++;
        $countries[$cell["filmCountry"]]++;
        $years[$cell["filmYear"]]++;

        $sql="
INSERT INTO `kino_films` (`filmID`, `filmType`, `filmName`, `filmOname`, `filmTranslate`, `filmTime`, `filmSize`, `filmScreen`, `filmGenre`, `filmYear`, `filmCountry`, `filmReggiser`, `filmActor1`, `filmActor2`, `filmActor3`, `filmSpecial`, `filmDvdnumber`, `filmDescr`, `filmSdescr`,`filmPrim`)
VALUES ('".$cell["filmID"]."', '".$type."', '".$cell["filmName"]."', '".$cell["filmOname"]."', '".$cell["filmTranslate"]."', '".$cell["filmTime"]."', '".$cell["filmSize"]."', '".$cell["filmScreen"]."', '".$cell["filmGenre"]."', '".$cell["filmYear"]."', '".$cell["filmCountry"]."', '".$cell["filmReggiser"]."', '".$actor1."', '".$actor2."', '".$actor3."', '".$cell["filmSpecial"]."', '".$cell["filmDvdnumber"]."', '".$cell["filmDescr"]."', '".$cell["filmSdescr"]."', '".$cell["filmPrim"]."');
";
        }

        if($type=="dvd"){
        $genres[$cell["filmGenre"]]++;
        $countries[$cell["filmCountry"]]++;
        $years[$cell["filmYear"]]++;
        $sql="
INSERT INTO `kino_films` (`filmID`, `filmType`, `filmName`, `filmOname`, `filmTranslate`, `filmTime`, `filmSize`, `filmScreen`, `filmGenre`, `filmYear`, `filmCountry`, `filmReggiser`, `filmActor1`, `filmActor2`, `filmActor3`, `filmSpecial`, `filmDvdnumber`, `filmDescr`, `filmSdescr`,`filmPrim`)
VALUES ('".$cell["filmID"]."', '".$type."', '".$cell["filmName"]."', '".$cell["filmOname"]."', '".$cell["filmTranslate"]."', '".$cell["filmTime"]."', '".$cell["filmSize"]."', '".$cell["filmScreen"]."', '".$cell["filmGenre"]."', '".$cell["filmYear"]."', '".$cell["filmCountry"]."', '".$cell["filmReggiser"]."', '".$actor1."', '".$actor2."', '".$actor3."', '".$cell["filmSpecial"]."', '".$cell["filmDvdnumber"]."', '".$cell["filmDescr"]."', '".$cell["filmSdescr"]."', '".$cell["filmPrim"]."');
";

        }

        if($type=="hdtv"){
        $genres[$cell["filmGenre"]]++;
        $countries[$cell["filmCountry"]]++;
        $years[$cell["filmYear"]]++;
        $sql="
INSERT INTO `kino_films` (`filmID`, `filmType`, `filmName`, `filmOname`, `filmTranslate`, `filmTime`, `filmSize`, `filmScreen`, `filmGenre`, `filmYear`, `filmCountry`, `filmReggiser`, `filmActor1`, `filmActor2`, `filmActor3`, `filmSpecial`, `filmDvdnumber`, `filmDescr`, `filmSdescr`,`filmPrim`)
VALUES ('".$cell["filmID"]."', '".$type."', '".$cell["filmName"]."', '".$cell["filmOname"]."', '".$cell["filmTranslate"]."', '".$cell["filmTime"]."', '".$cell["filmSize"]."', '".$cell["filmScreen"]."', '".$cell["filmGenre"]."', '".$cell["filmYear"]."', '".$cell["filmCountry"]."', '".$cell["filmReggiser"]."', '".$actor1."', '".$actor2."', '".$actor3."', '".$cell["filmSpecial"]."', '".$cell["filmDvdnumber"]."', '".$cell["filmDescr"]."', '".$cell["filmSdescr"]."', '".$cell["filmPrim"]."');
";

        }

        if(!mysql_query($sql)) {print "<h5>Ошибка!<br>".mysql_error()."</h5>"; print "<p>$sql</p>";}
       
}//$DATA!=0
}//while


mysql_query("DELETE FROM kino_genres WHERE genreType='$type'");
mysql_query("DELETE FROM kino_countries WHERE countryType='$type'");
mysql_query("DELETE FROM kino_years WHERE yearType='$type'");

while (list ($gkey, $gval) = each ($genres)) {
if(strlen($gkey)>3){
$gval=trim($gval);
mysql_query("INSERT INTO `kino_genres` (`genreName`, `genreType`, `genreCount`) VALUES ('".$gkey."', '".$type."', '".$gval."')");
}
}

while (list ($ckey, $cval) = each ($countries)) {
if(strlen($ckey)>3){
$cval=trim($cval);
mysql_query("INSERT INTO `kino_countries` (`countryName`, `countryType`, `countryCount`) VALUES ('".$ckey."', '".$type."', '".$cval."')");
}
}

while (list ($ykey, $yval) = each ($years)) {
$yval=trim($yval);
    if( strlen($ykey)<5 && strlen($ykey)>1){
    mysql_query("INSERT INTO `kino_years` (`yearName`, `yearType`, `yearCount`) VALUES ('".$ykey."', '".$type."', '".$yval."')");
    }
}


echo"<pre>";
//print_r($genres);
echo"</pre>";

}[/spoiler]

Отредактировано 3001 (2010-03-04 15:44:13)

72

Re: Смена кодировки базы в phpMyAdmin

Извините, я Вас "обманул" не нарочно, а по незнанию. Оказывается не имеет значения, не добавляется именно кириллица, регистр значения не имеет.

Из чего был сделан изначальный, неверный вывод? Да просто были случаи добавления именно как в примере. Не добавлялся не весь текст, а только его часть.
К примеру, эта часть
mysql_query("INSERT INTO `kino_genres` (`genreName`, `genreType`, `genreCount`) VALUES ('".$gkey."', '".$type."', '".$gval."')");
отвечает за добавление буквально одного словечка, но кириллицы. Тут получается просто пустое поле.
А эта
INSERT INTO `kino_films` (`filmID`, `filmType`, `filmName`, `filmOname`, `filmTranslate`, `filmTime`, `filmSize`, `filmScreen`, `filmGenre`, `filmYear`, `filmCountry`, `filmReggiser`, `filmActor1`, `filmActor2`, `filmActor3`, `filmSpecial`, `filmDvdnumber`, `filmDescr`, `filmSdescr`,`filmPrim`)
VALUES ('".$cell["filmID"]."', '".$type."', '".$cell["filmName"]."', '".$cell["filmOname"]."', '".$cell["filmTranslate"]."', '".$cell["filmTime"]."', '".$cell["filmSize"]."', '".$cell["filmScreen"]."', '".$cell["filmGenre"]."', '".$cell["filmYear"]."', '".$cell["filmCountry"]."', '".$cell["filmReggiser"]."', '".$actor1."', '".$actor2."', '".$actor3."', '".$cell["filmSpecial"]."', '".$cell["filmDvdnumber"]."', '".$cell["filmDescr"]."', '".$cell["filmSdescr"]."', '".$cell["filmPrim"]."');
за добавление сравнительно больших текстов. Тут то и наблюдается "обрезание" сначала, как в примере в моем первом посте.
В принципе, в скрипте не сомневаюсь, мне кажется дамп криво перенесся. sad Прошу помощи.

Отредактировано 3001 (2010-03-02 17:09:24)

73

Re: Смена кодировки базы в phpMyAdmin

Вот очень похожая проблема http://forum.php-myadmin.ru/viewtopic.php?id=754

74

Re: Смена кодировки базы в phpMyAdmin

3001
Посмотрите с помощью phpMyAdmin как выглядит кириллица в БД. Если она читаема, то все нормально было импортировано.

Попробуйте в коде подключения сразу после функции mysql_connect прописать строку:
[mono]mysql_query('SET NAMES cp1251');[/mono]

ВКонтакте Facebook Twitter

75

Re: Смена кодировки базы в phpMyAdmin

Hanut пишет:

Посмотрите с помощью phpMyAdmin как выглядит кириллица в БД. Если она читаема, то все нормально было импортировано.

Она читаема, более того, все на сайте работает и отобрадается корректно. Проблема именно с обновлением (добавлением, возможно INSERT не корректно работает) из *.csv - кириллица не добавляется. К примеру, есть гостевая, из которой данные добавляются также в одну из таблиц. Таблица из гостевой и таблица, в которую скрипт добавляет данные, идентичны (и на таблице и в столбцах кодировка cp1251 и сравнение cp1251_general_cs), однако в гостевую кириллица добавляется без проблем.
Вот, что еще забыл сообщить, посчитав это не значительным. В скрипте видим, что он добавляет данные в 4 таблицы (kino_films, kino_genres, kino_countries и kino_years). Первые содержат кириллицу, последняя цифры (с ней проблем нет). На прежнем хостинге в таблице kino_films было 20 столбцов - все работало. После переноса потребовалось добавить еще 2, однако в скрипт обновления они включены не были. Сюда (тут их 20)
---
INSERT INTO `kino_films` (`filmID`, `filmType`, `filmName`, `filmOname`, `filmTranslate`, `filmTime`, `filmSize`, `filmScreen`, `filmGenre`, `filmYear`, `filmCountry`, `filmReggiser`, `filmActor1`, `filmActor2`, `filmActor3`, `filmSpecial`, `filmDvdnumber`, `filmDescr`, `filmSdescr`,`filmPrim`)
---
Подумал, что это не существенно, во-первых, потому, что INSERT INTO четко указывает, в какие столбцы, какие значения вписывать и добавление еще 2 столбцов в скрипт не должны сказаться на его работе (там более, что столбцы пока тестовые, пустые, присутствуют только в таблице kino_films, в файле csv их нет). Во-вторых, удалив эти 2 столбца из таблицы, скрипт все равно не добавляет кириллицу. В-третьих, другие таблицы (2 и 3) то не изменялись, а кириллица в них все равно не добавляется.

Hanut пишет:

mysql_query('SET NAMES cp1251');

Не помогло, кириллица не добавляется.