Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переход от cp1251 к utf-8 
:(
    Опции темы
bars80080
Дата 19.10.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



хочу одним махом перейти из cp1251 в utf-8

БД, таблицы в ней, данные, всё в cp1251

как грамотно переконвертировать все данные в utf-8?



в частности, вот этот запрос
Код

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;
конвертнёт ли уже существующие данные в таблице?
PM MAIL WWW   Вверх
sTa1kEr
Дата 19.10.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



И вы туда-же...

Цитата(bars80080 @  19.10.2009,  16:37 Найти цитируемый пост)
конвертнёт ли уже существующие данные в таблице? 

Нет

Цитата(bars80080 @  19.10.2009,  16:37 Найти цитируемый пост)
как грамотно переконвертировать все данные в utf-8?

9.1.12. Column Character Set Conversion

Это сообщение отредактировал(а) sTa1kEr - 19.10.2009, 16:51
PM MAIL   Вверх
bars80080
Дата 19.10.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



Цитата(sTa1kEr @  19.10.2009,  16:32 Найти цитируемый пост)
И вы туда-же...

а шо, не надо?

Добавлено через 1 минуту и 34 секунды
что-то я не понял, я должен каждую колонку конвертировать отдельно?
PM MAIL WWW   Вверх
sTa1kEr
Дата 19.10.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Цитата(bars80080 @  19.10.2009,  17:56 Найти цитируемый пост)
что-то я не понял, я должен каждую колонку конвертировать отдельно? 

Да. То, что выше приведенный запрос ничего не изменит можно догадаться по ключевому слову DEFAULT даже не заглядывая в, столь ненавистную всем, документацию.

Это сообщение отредактировал(а) sTa1kEr - 19.10.2009, 17:14
PM MAIL   Вверх
bars80080
Дата 19.10.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



э, я его скопировал только по тому, что он был в соответствующей теме по поиску. что они тогда там обсуждали?

получается, надо писать бегунок по всем таблицам, который будет потрошить INFORMATION_SCHEMA, и конвертить каждый столбик?

но они же у меня по дефолту аки таблица. одним изменением кодировки таблицы (или даже базы) не обойдётся?
PM MAIL WWW   Вверх
sTa1kEr
Дата 19.10.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Цитата(bars80080 @  19.10.2009,  18:31 Найти цитируемый пост)
э, я его скопировал только по тому, что он был в соответствующей теме по поиску. что они тогда там обсуждали?

Ну а какая ссылка то у темы?

Цитата(bars80080 @  19.10.2009,  18:31 Найти цитируемый пост)
получается, надо писать бегунок по всем таблицам, который будет потрошить INFORMATION_SCHEMA, и конвертить каждый столбик?

Можно проще
Цитата

If you want to change the table default character set and all character columns (CHAR, VARCHAR, TEXT) to a new character set, use a statement like this:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

PM MAIL   Вверх
bars80080
Дата 19.10.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



о, завтра будем мучать

а такой же волшебной фразы сразу для всей БД нет? чтоб одним запросом
PM MAIL WWW   Вверх
sTa1kEr
Дата 19.10.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Цитата(bars80080 @  19.10.2009,  19:02 Найти цитируемый пост)
а такой же волшебной фразы сразу для всей БД нет?

Нету. http://dev.mysql.com/doc/refman/5.0/en/cha...sion.html#c9684
PM MAIL   Вверх
bars80080
Дата 20.10.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



так, момент истины

запустил я этот скрипт, он переписал характеристику CHARSET и COLLATION для всех таблиц базы
в SHOW CREATE table_name показывает нужную кодировку utf-8
ну, в ручную базе поменял тоже самое

это что, всё?

типа, у меня база в ютф-8 и все сохранённые данные в ней?


к примеру, varchar(100) так и будет расчитано на 100 символов любого языка /латиница, кирилица и т.п./?

PM MAIL WWW   Вверх
sTa1kEr
Дата 20.10.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Цитата(bars80080 @  20.10.2009,  17:21 Найти цитируемый пост)
типа, у меня база в ютф-8 и все сохранённые данные в ней?

Ну можешь убедится в этом выполнив 
Код

SET character_set_results = NULL;
SELECT any_text_field FROM table_name;

В результате должны будут возвратится данные без перекодирования, т.е. в UTF-8.
PM MAIL   Вверх
bars80080
Дата 20.10.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



да, что-то я такое уже сделал

я собсно чего полез конвертироваться. опять упёрся в аякс, который cp1251 в квадратики превращает. только в этот раз я перегонял солидный кусок текста. полностью его пропустить через rawurlencode() на сервере и decodeURIComponent() на клиенте не получилось. какая-то ошибка, а заниматься конвертом каждого отдельного кусочка - было в падлу.
сейчас всё без этих нагромождений летает

ладно, спасибо


а есть какие-нибудь заморочки с utf-8?

чёрт, вспомнил, теперь придётся отследить все строковые функции и переправить на mb_*
PM MAIL WWW   Вверх
sTa1kEr
Дата 20.10.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Цитата(bars80080 @  20.10.2009,  17:43 Найти цитируемый пост)
чёрт, вспомнил, теперь придётся отследить все строковые функции и переправить на mb_* 

Можно подменить строковые функции мультибайтовыми, но это нужно делать осторожно и всегда иметь ввиду, что получить размер строки в байтах при помощи strlen() уже будет невозможно. Так же не стоит подменять функцию mail().
PM MAIL   Вверх
bars80080
Дата 20.10.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



а это полный список необходимых замен?

у меня в основном используется str_replace 

(ошибок пока нет)

Цитата(sTa1kEr @  20.10.2009,  17:37 Найти цитируемый пост)
Так же не стоит подменять функцию mail()

а старая будет работать?
PM MAIL WWW   Вверх
sTa1kEr
Дата 20.10.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Цитата(bars80080 @  20.10.2009,  18:58 Найти цитируемый пост)
а это полный список необходимых замен?

Что значит необходимых замен? Это список финкций которые можно подменить аналогичными из mb_* не трогая сам код.

Цитата(bars80080 @  20.10.2009,  18:58 Найти цитируемый пост)
у меня в основном используется str_replace 

str_replace'у пофик на кодировку.

Цитата(bars80080 @  20.10.2009,  18:58 Найти цитируемый пост)
а старая будет работать? 

Ну если вы не будете устанавилиывть первый бит для этого параметра, то логика работы оригинальной функции mail() не изменится.

В общем, если у вас в коде используется много функций str* из приведенного по ссылке списка, то можно установить в PHP параметр mbstring.func_overload = 2. Иначе лучше заменить эти функции в коде руками.
PM MAIL   Вверх
bars80080
Дата 20.10.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 5
Всего: 315



Цитата(sTa1kEr @  20.10.2009,  18:44 Найти цитируемый пост)
Ну если вы не будете устанавилиывть первый бит для этого параметра,

хосподи, это ещё что такое?


Цитата(sTa1kEr @  20.10.2009,  18:44 Найти цитируемый пост)
В общем, если у вас в коде используется много функций str* из приведенного по ссылке списка, то можно установить в PHP параметр mbstring.func_overload = 2. Иначе лучше заменить эти функции в коде руками. 

да не, не много. ну и не руками конечно, бегунком каким-нибудь  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.