За последние 24 часа нас посетили 20858 программистов и 1656 роботов. Сейчас ищут 1910 программистов ...

Изменение кодировки записей в Mysql

Тема в разделе "MySQL", создана пользователем stud2000, 18 апр 2006.

  1. stud2000

    stud2000 Активный пользователь

    С нами с:
    18 апр 2006
    Сообщения:
    13
    Симпатии:
    0
    есть много инфы в базе мускула, в неправильной кодировке
    Пример:
    PHP:
    1.  
    2. CREATE TABLE `j4u_category` (
    3.   `id` smallint(5) NOT NULL auto_increment,
    4.   `parentid` smallint(5) NOT NULL default '0',
    5.   `posi` smallint(5) NOT NULL default '1',
    6.   `name` varchar(50) character set latin1 NOT NULL default '',
    7.   `alt_name` varchar(50) character set latin1 NOT NULL default '',
    8.   `icon` varchar(200) character set latin1 NOT NULL default '',
    9.   `skin` varchar(50) character set latin1 NOT NULL default '',
    10.   PRIMARY KEY  (`id`)
    11. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;
    12.  
    13.  
    14. INSERT INTO `j4u_category` VALUES (1, 0, 1, 'Ãëàâíàÿ', 'main', '', '');
    15. INSERT INTO `j4u_category` VALUES (2, 0, 3, 'Êàðòèíêè', 'images', '', '');
    16. INSERT INTO `j4u_category` VALUES (3, 0, 2, '�ñòîðèè', 'story', '', '');
    17. INSERT INTO `j4u_category` VALUES (4, 0, 4, 'Îáîè äëÿ ðàáî÷åãî ñòîëà', 'Wallpapers', '', '');
    18. INSERT INTO `j4u_category` VALUES (5, 0, 5, 'Äåâóøêè', 'Girls', '', '');
    19. INSERT INTO `j4u_category` VALUES (6, 0, 6, 'Ìóæ÷èíû', 'Mens', '', '');
    20.  
    с помощью iconv можно перевести в cp1251:
    PHP:
    1.  
    2. echo iconv('UTF-8','latin1',file_get_contents('text.txt'));
    3.  
    Вопрос так как база большая возможно ли сделать это средствами phpmyadmin или другими средстами, потому как iconv весь дамп таким образом не способен обрывает на середине...
    Полскажите плиз. Заранее вам благодарен.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    stud2000
    1. деалешь дамп в UTF-8
    2. меняешь кодировки при создании таблиц на нужные.
    3. заливаешь дамп обратно.

    p.s. я бы все хранил в UTF-8 а при коннекте выставлял нужную кодировку с помощью SET NAMES CP1251 например.
     
  3. stud2000

    stud2000 Активный пользователь

    С нами с:
    18 апр 2006
    Сообщения:
    13
    Симпатии:
    0
    когда заливаю дамп вот такое выдает
    #1062 - Duplicate entry '??????' for key 2

    Может я туплю, но я непонимаю почему так вот...
     
  4. Mavir

    Mavir Guest

    Надо очистить старую базу
     
  5. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    stud2000
    Посмотри файл дампа. Если там вместо кирилицы "?????" значит неправильно сохранил.
     
  6. stud2000

    stud2000 Активный пользователь

    С нами с:
    18 апр 2006
    Сообщения:
    13
    Симпатии:
    0
    Млин, объясните по пунктам что делать...
    1) я убиваю всю базу в ноль...
    2) потом меняю в фале все
    PHP:
    1.  
    2. `skin` varchar(50) character set latin1 NOT NULL default ''
    3. на
    4. `skin` varchar(50) character set cp1251 NOT NULL default ''
    5.  
    и заливаю дамп обратно (вопрос в какой кодировке?) если в utf8 выдает такую ошибку а в cp1251 получается не легче т.е. иероглифы...
     
  7. stud2000

    stud2000 Активный пользователь

    С нами с:
    18 апр 2006
    Сообщения:
    13
    Симпатии:
    0
    2vasa_c в дампе то что было в первом сообщении
     
  8. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    У меня в phpMyAdmin в форме, где на исполнение загружается *.sql файл есть select "кодировка файла". Видимо там нужно выбрать UTF.
    Хотя я что-то запутался.
    В столбцах у вас latin, в таблице cp1251, в инсертах UTF.
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    stud2000
    1. делаешь дамп в UTF-8
    2. открываешь файл редактором, который поддерживает UTF-8 (MSWord)
    3. правишь кодировку
    4. заливаешь обратно
     
  10. stud2000

    stud2000 Активный пользователь

    С нами с:
    18 апр 2006
    Сообщения:
    13
    Симпатии:
    0
    Всем спасибо, решение найдено с помощью "штирлица" в нем надо было сделать encode utf и залить дамп обратно.
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    stud2000
    в соседнем офисе сидит мой друг (Сева), который и писал этого "штирлица".
    я передал ему "привет" ...
     
  12. Danilevsky

    Danilevsky Активный пользователь

    С нами с:
    12 фев 2006
    Сообщения:
    286
    Симпатии:
    0
    Адрес:
    Киев
    А как быть с текстовыми полями типа varchar(10)?
    Известно что нелатинские символы в utf-8 занимают 2 байта вместо одного и поэтому, когда вставляешь русское слово в базу из 10 букв, база его обрезает.
    Как бороться с этим? Я менял величину varchar в базе везде на велечину вдвое большую... но кажется мне что есть другой, более гуманный вариант. Есть или нет?
     
  13. Kelkos

    Kelkos Активный пользователь

    С нами с:
    15 апр 2006
    Сообщения:
    37
    Симпатии:
    0
    Вообщем. муська сама всё замечательно конвертит.
    На текстовые поля выполняем запросики:
    Код (Text):
    1. ALTER TABLE my_table
    2.   CHANGE COLUMN my_field my_field char(255) CHARACTER SET cp1251 NOT NULL DEFAULT ''
    Для примера ковертил char(255) с соотв параметрами.. Вообщем, проходимся по текстовым полям и всё ок. Но проще пользоваться прогой mysql-front чем самому всё это писать.
    З.Ы. муська 4.1.18
     
  14. evgenyt

    evgenyt Активный пользователь

    С нами с:
    9 мар 2006
    Сообщения:
    53
    Симпатии:
    0
    Адрес:
    Russia, Murmansk
    Из Мурманска ему тоже большой привет и респект... сэкономил много времени =) Как нить пивом проставимся =)
    * простите уж за флуд. Вырвалось