Автор Гілка: MySQL encoding  (Прочитано 2377 раз)

Відсутній Satan

  • Кореспондент
  • ***
  • дописів: 141
  • Карма: +0/-0
  • C++ Guru
MySQL encoding
« : 2007-09-15 22:41:26 »
я поставив форум punbb і ще зверху українізатор UTF-8.. сторінки почали відображатися в UTF-8 але періодично почали вилазити різні глюки із кодуванням.. коли я подивився в БД - я впав в ступор - charset i collation - cp1251

і всі дані у вигляді

ггг

або

Зустрічі


можна якось безболісно це все конвертувати до нормального вигляду і привести все (HTML+BD) до якогось одного кодування cp1251 або UTF-8???

питання 2: що таке collation? я вже питав кількох нібито досвідчених людей, але отримав відповідь що це така штука яку варто ставити в cp2151_general, а для чого воно треба - хз.. (я як прихильник UTF-8 етично промовчав =) )
« Змінено: 2007-09-15 22:46:40 від Satan »
Ubuntu 8.04

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: MySQL encoding
« Відповідей #1 : 2007-09-16 00:35:55 »
найкраще (але не обов'язково напростіше) - це зробити dump бази в sql, потім iconv -f cp1251 -t utf-8, потім перестворити базу з кодуванням utf-8 і правильним алгоритмом впорядкування, і потім залити sql назад в базу...
(точних команд не дам, бо користуюся postgresql)
collation - це алгоритм впорядкування, тобто як будуть сортуватися літери в індексах, в ORDER BY і т.д...
Fedora 35 (x86-64)

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: MySQL encoding
« Відповідей #2 : 2007-09-16 00:40:11 »
примітка: cp1251 може бути дещо швидшим і займати менше місця, якщо багато кирилиці, але якщо йти в ногу з часом і дійсно будувати щось багатомовне/нелатинське то альтернативи Unicode немає
Fedora 35 (x86-64)

Відсутній Satan

  • Кореспондент
  • ***
  • дописів: 141
  • Карма: +0/-0
  • C++ Guru
Re: MySQL encoding
« Відповідей #3 : 2007-09-16 11:51:09 »
не діє - крім того видає помилку

iconv: illegal input sequence at position 1361

останні три рядка

ІNSERT INTO `categories` VALUES (1, 'Р’СЃСЏРєРµ', 1);
ІNSERT INTO `categories` VALUES (2, 'Organization', 0);
ІNSERT INTO `categories` VALUES (3, 'Форум', 0);


в результаті конвертації виглядають ось так

ІNSERT INTO `categories` VALUES (1, 'Р’СЃСЏРєРµ', 1);
ІNSERT INTO `categories` VALUES (2, 'Organization', 0);
ІNSERT INTO `categories` VALUES (3, 'ФоруРС

далі обривається - тобто конвертувалось 56 рядків із 3,5 тисяч


по другому питанню -
що може статись якщо collation вказаний неправильно?

З.І. на цьому форуме неможливо опублікувати пост із текстом
ІNSERT INTO `categories` VALUES

отримую повідомлення -

Forbidden
You don't have permission to access /cgi-bin/yabb/YaBB.pl on this server.

я був вимушений поставити українську І ))
« Змінено: 2007-09-16 12:00:18 від Satan »
Ubuntu 8.04

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: MySQL encoding
« Відповідей #4 : 2007-09-16 16:58:48 »
не діє - крім того видає помилку

iconv: illegal input sequence at position 1361

останні три рядка
після того, як ще раз прочитав Ваше перше повідомлення, складається враження, що у вас рядки в базі можуть бути вже в utf-8 (та закодований в html utf-8), тобто спробуйте просто пропустити крок з "iconv"

коли все запрацює можна буде потім ще оптимізувати закодований в html utf-8 в звичайний...

по другому питанню -
що може статись якщо collation вказаний неправильно?
від "нічого", якщо стовпчики з кодуванням, що не збігаються з collation, використовуються лише для показу, до неправилього впорядкування, якщо використовуються, напр. в ORDER BY, до великих проблем з пошуком, якщо вони вживаються в WHERE або на них будуються індекси
Fedora 35 (x86-64)

Відсутній Satan

  • Кореспондент
  • ***
  • дописів: 141
  • Карма: +0/-0
  • C++ Guru
Re: MySQL encoding
« Відповідей #5 : 2007-09-16 22:37:23 »
нажаль теж не допомогло.. у мене вже не було часу розбиратись.. тому я поставив заново і перекспортив користувачів.. форум прожив всього день - тому втрати незначні.. нерви дорожче

в будь якому випадку дякую за інформацію, я сьогодні дізнався багато корисного ))
Ubuntu 8.04