Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / перекодировка из win1251 в UTF-8 / 15 сообщений из 15, страница 1 из 1
25.08.2014, 09:04:03
    #38727775
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
всем привет
у меня вопрос: можно ли и как перекодировать базу данных win1251 в UTF-8?
...
Рейтинг: 0 / 0
25.08.2014, 14:54:49
    #38728151
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
Попробуй через полный бэкап...
...
Рейтинг: 0 / 0
26.08.2014, 11:10:27
    #38728805
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
Akina,
не совсем понял...
надо в phpMyAdmin сделать экспорт с какими-то настройками?
или mysqldump?
...
Рейтинг: 0 / 0
26.08.2014, 19:02:54
    #38729418
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
В общем виде задача решается примерно так (один из способов):
1. Делаете дамп существующей базы при помощи штатного mysqldump или другого средства.
2. Перекодируете файл дампа в нужную кодировку (из cp1251 в utf-8) при помощи iconv, например.
3. В дампе меняете указание кодировок для таблиц и полей (cp1251 на utf8) при помощи sed или другого редактора.
4. Заливаете дамп в базу.

Если нет полной уверенности, то лучше сначала залить дамп в тестовую базу и убедиться, что всё в порядке.

Разумеется, это будет работать если только в существующей базе нет косяков, вроде несоответствия кодировки таблицы и данных. Ну и иногда бывают нюансы, конечно же. Сам по себе этот способ мне нравится тем, что в дампе можно визуально проконтролировать все изменения.
При необходимости структуру и данные можно в новую базу перегонять отдельными дампами.
...
Рейтинг: 0 / 0
27.08.2014, 09:23:36
    #38729739
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
vkleВ общем виде задача решается примерно так (один из способов):
1. Делаете дамп существующей базы при помощи штатного mysqldump или другого средства.
2. Перекодируете файл дампа в нужную кодировку (из cp1251 в utf-8) при помощи iconv, например.
3. В дампе меняете указание кодировок для таблиц и полей (cp1251 на utf8) при помощи sed или другого редактора.
4. Заливаете дамп в базу.
приблизительно так это и представлял...
но не понял ваш 2-й пункт = а зачем сам файл sql-скрипта перекодировать?
...
Рейтинг: 0 / 0
27.08.2014, 09:27:18
    #38729742
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
buyboyа зачем сам файл sql-скрипта перекодировать?За тем, что Вы хотите
buyboyперекодировать базу данных win1251 в UTF-8
...
Рейтинг: 0 / 0
27.08.2014, 09:36:09
    #38729748
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
vkleЗа тем, что Вы хотите
а если я не перекодирую sql-скрипт, а просто поменяю в нем кодировку для таблиц и полей?
...
Рейтинг: 0 / 0
28.08.2014, 12:41:27
    #38731469
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
buyboy, все ясно. используйте sypex dumper. там в документации написано как делать перекодировку.
и про бекап не забудьте
...
Рейтинг: 0 / 0
28.08.2014, 15:00:39
    #38731713
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
buyboyvkleЗа тем, что Вы хотите
а если я не перекодирую sql-скрипт, а просто поменяю в нем кодировку для таблиц и полей?А Вы попробуйте. Не, ну можете пробовать не на живой базе, а просто мысленно проиграть предполагаемый Вами сценарий.

PS: Если в дампе не будет кириллицы, то всё будет в порядке.
...
Рейтинг: 0 / 0
29.08.2014, 11:13:20
    #38732482
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
netwindbuyboy, все ясно. используйте sypex dumper. там в документации написано как делать перекодировку.
и про бекап не забудьте
большое спасибо!
это бесплатная софтина?
...
Рейтинг: 0 / 0
29.08.2014, 11:13:55
    #38732484
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
vklebuyboyпропущено...

а если я не перекодирую sql-скрипт, а просто поменяю в нем кодировку для таблиц и полей?А Вы попробуйте. Не, ну можете пробовать не на живой базе, а просто мысленно проиграть предполагаемый Вами сценарий.

PS: Если в дампе не будет кириллицы, то всё будет в порядке.
гут! спасибо!
...
Рейтинг: 0 / 0
29.08.2014, 12:14:49
    #38732599
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
buyboy, гуглить уже не в моде?
это такой пшп-скрипт. с прибабахом, но людям нравится.
...
Рейтинг: 0 / 0
29.08.2014, 14:20:59
    #38732762
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
да у субд вообщемто есть своя функция перекодирования.

итак...вцелом тут 2задачи быает

1 ИЗ цепочки байт в кодировке КОД1 получить цепочку байт в кодировке КОД2
по идее, если в одном поле храниться текст в одной кодировке, в другом в другой оно само
при присвоении это сделает

проверяем. ааа(ch - cp1251,ch2-utf8) в оба записали букву я

select hex(ch),hex(ch2) from aaa;
"FF",\N
\N,"D18F"
update aaa set ch = ch2 where ch is null;
update aaa set ch2 = ch where ch2 is null;

select hex(ch),hex(ch2) from aaa;
"FF","D18F"
"FF","D18F"

как видим, субд понимает что такое кодировка текста.

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

тут идя по варианту 1 можем получать непредвиденные ситуации.

по таблице предыдущей создадим такую ошибку

update aaa set ch = unhex(hex(ch2)) ;
select hex(ch),hex(ch2) from aaa;
"D18F","D18F"
"D18F","D18F"

как видим, теперь в однобайтовой кодировке (первый столбик) лежит буква я записанная
в ютф

теперь если
update aaa set ch2 = ch ;
select hex(ch),hex(ch2) from aaa;
"D18F","D0A1D08F"
"D18F","D0A1D08F"
ибо субд каждый байт из первой, закодировала в два байта по правилам второй колонки

как уже смекнул читатель, переносить нужно было через функцию unhex(hex(value))

дело в том, что unhex возвращает бинарные вычисленные данные, и как следсвие понятие
кодировки к ним субд не применяет, поэтому чтобы перенести данные мужду столбцами
с разными кодировками но без перекодирования, нужно ити путём
col1 = unhex(hex(col2))
...
Рейтинг: 0 / 0
01.09.2014, 11:20:39
    #38733905
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
alex564657498765453,
круть... спасибище...
но мой моцк - вспотел...
...
Рейтинг: 0 / 0
01.09.2014, 12:37:30
    #38733987
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из win1251 в UTF-8
buyboy, он вообще на своей волне. и вы не описали никаких фактов, из которых следовало бы, что вам это нужно читать и понять.
попробуйте sypex. все остальное потом.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / перекодировка из win1251 в UTF-8 / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]