Как поменять кодировку всех таблиц в MySQL

Иногда бывает так, что из доступа к базе данных бывает только доступ через phpMyAdmin. А также бывает, что кто-то, создал базу с неправильной кодировкой. В моем случае этой кодировкой была — шведская. Что же делать для того чтобы поменять кодировку на более нужную — к примеру utf8?

Для этого существует очень простой способ. Необходимо выполнить вот такой вот запрос при помощи редактора SQL в phpMyAdmin:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

Все бы было ничего, если бы табличек было немного, или хотя бы полей. Но вот беда, табличек может быть и 30 и 40, а лично я очень ленивый, чтобы перебирать их все ручками, да к тому же надо не забыть поменять кодировку также в каждом текстовом поле. Пришлось немножко пошаманить, и вуаля, результат не заставил себя долго ждать.

Итак, MySQL сервер версии 5.0 и выше, умеет выполнить вот такой вот запрос:

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
  FROM `information_schema`.`TABLES` t
 WHERE 1
   AND t.`TABLE_SCHEMA` = 'db_name'
 ORDER BY 1

в этом запросе, вместо db_name необходимо поменять на реальное имя базы данных, кодировку которой вы собираетесь менять.

Выполнив этот запрос, мы получим еще один SQL, модифицирующий кодировку таблиц, он будет выглядеть примерно так:

ALTER TABLE `mydatabase`.`auth_group_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_group` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_message` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_permission` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user_groups` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user_user_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`blog_post` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_admin_log` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_comments` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_comment_flags` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_content_type` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_session` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_album` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_photo` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_video` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`members_userprofile` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Вот теперь можно копировать результирующий скрипт и выполнять его в окошке SQL зпросов. Результатом выполнения данного скрипта будет изменение кодировки во всех таблицах MySQL базы данных.

Вот так можно сэкономить кучу времени отдав выполнение кучи грязной работы всякого рода автоматизации :)

Категории: Базы данных  Теги: , ,
  1. Трэкбеков пока нет.
  1. Игорь
    8 апреля 2011 15:33 | №1

    Спасибо! Очень помогло!!!!

  2. 8 апреля 2011 18:21 | №2

    Приятно слышать, что мой труд не пропадает напрасно, и приносит помощь.

  3. 12 апреля 2011 16:28 | №3

    Гениально, спасибо. :)

    Ковырялся с русификацией ZenCart, а там все таблицы (93 штуки) оказались с уже выставленной кодировкой. Скрипт отработал легко и звонко.

  4. 13 апреля 2011 16:18 | №4

    Спасибо, действительно помогло!

    Бился с базой битрикса, после обновления которого, сравнение таблиц (а их 360!!!) поменялось с utf8_general_ci на utf8_unicode_ci.

    ЗЫ: думал блог мертвый, ан нет! — можно поблагодарить!

    Спасибо =)

  5. Kristina
    29 апреля 2011 0:00 | №5

    Спасибо большое, очень помог :p

  6. Алексей
    11 мая 2011 23:11 | №6

    Громадное спасибо! Избавил от переустановки :D

  7. Владимир
    29 мая 2011 21:47 | №7

    Спасибо, дружище, очень помог.

  8. Олег
    30 мая 2011 8:47 | №8

    Великолепно и гениально! Очень помогло справиться с непокорным битриксом)

  9. 30 мая 2011 9:37 | №9

    Пожалуйста, пользуйтесь на здоровье, сам этим скриптом часто пользуюсь, и мне самому очень помогает

  10. Atapin
    25 июня 2011 2:49 | №10

    да, действительно спасибо! :)

    Раньше всегда менял кодировку, ну при необходимости, фактически вручную.

    Сохранял базу, далее поиск->замена и сохранение в UTF-8

    век живи век учись...

    ! Спасибо

  11. Erik
    6 июля 2011 23:31 | №11

    Замечательно, работает))))))

  12. Andrey
    9 августа 2011 10:08 | №12

    Спасибо, много пересмотрел и перепробовал, но сработало только это!!))))))))))))))

  13. FactoREAL
    29 октября 2011 17:43 | №13

    Я извиняюсь, но чё то у меня ниразу не работает =( у меня есть таблица изначально хранившаяся в БД с кодировкой latin1, теперь я хочу её перенести на другой сервер и перекодировать в utf8. создал копию таблицы с помощью mysqldump и перенёс на другой сервер. но никак оно не хочет становиться utf8... как отображались кракозябры, так и отображаются... если сделать set names latin1 то выборка происходит нормально т.е. получается что база остаась в кодировке latin1

  14. 29 октября 2011 17:46 | №14

    дак ведь после переноса на новый сервер, нужно прогнать скрипт, приведенный выше в посте.

  15. FactoREAL
    29 октября 2011 17:51 | №15

    ну я про него и писал, что у меня он не работает. у меня таблица всего одна, так что я руками прописываю ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci и результата никакого он не даёт. всё остаётся как и раньше в latin1

  16. FactoREAL
    29 октября 2011 17:58 | №16

    кстати я смотрю что в /usr/share/mysql/charsets нету никакого файла utf8.xml ... может мой мускул в принципе не способен работать с этой кодировкой ?

  17. 29 октября 2011 20:07 | №17

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

  18. Руслан
    1 ноября 2011 15:21 | №18

    Спасибо!

  19. Инна
    3 ноября 2011 22:30 | №19

    Я так свой блог спасла, бывают же добрые люди типо вас... :love:

  20. Дмитрий
    11 ноября 2011 19:58 | №20

    А у меня создалась после первого запроса база данных information_schema (28), с которой я и не знаю, что делать? К тому же удалить её тоже не знаю как... ;- (

  21. Лариса
    16 декабря 2011 11:32 | №21

    Спасибо!!!!!!!!!!!!!!!!!!!! этим легко решилась проблема виртуалмарта , когда из-за кодировки шведиш все характеристика товара были со знаками вопроса... во всем интернете предлагали фиг знает какие решения, только не эффективные. вы молодец :love:

  22. zolotivan
    10 февраля 2012 18:50 | №22

    Спасибо! Работает!

    Грешным делом подумал, что все комменты обыкновенная бот-поддержка блога, но терять было нечего и попробовал :) Работает!

  23. Irina
    18 февраля 2012 14:17 | №23

    Спасибо! Реально работает!

    У меня в БД 256 таблиц! Замучилась вручную менять, решила погуглить и нашла множество советов, но этот оказался реально рабочим! Радости нет предела!

    Дмитрий, базу данных information_schema оставьте в покое!

  24. 18 февраля 2012 14:27 | №24

    Дмитрий, Ирина права, оставьте базу information_schema в покое — это системная база MySQL. Если вы будуте ее ломать, то полетит весь сервер.

    Всегда рад, что мои советы помогают люям в решении их проблем.

  25. 12 марта 2012 21:24 | №25

    Спасибо, да, полезная вещь — мне помогло!

  26. Сектор
    24 апреля 2012 22:36 | №26

    #1115 — Unknown character set: 'utf8_general_ci'

    Получаю такую ошибку, причем при указании любой кодировки :(

  27. Евгений
    22 мая 2012 10:32 | №27

    Спасибо, пригодилось. :D

  28. Алексей
    5 июня 2012 21:08 | №28

    Спасибо огроменное! Так выручил!

  29. Александр
    17 июня 2012 20:59 | №29

    Спасибо дружище!Всё работает! Огромный респект!

  30. Михаил
    13 июля 2012 2:19 | №30

    Большое спасибо! сработало!

  31. 18 июля 2012 11:08 | №31

    Благодарю!!!!!!

  32. 24 июля 2012 20:38 | №32

    У меня слов нету. Огромнейшее спасибо за инструкцию. В нете кучу всего перерыл, и только этот способ помог. Настоящий человечище )))

    Добавлю в закладки, еще пригодится. :D

  33. Марина
    27 июля 2012 21:19 | №33

    Спасибо огромнейшее преогромнейшее автору.

    хотелось бы добавить для таких тупеней как я(потому что я полдня потратила, чтоб понять где это вводить).

    У меня например были ??? вместо русских слов в категориях виртумарта

    Что делаем:

    если сайт находится на сервере на вашем компьютере

    1 в адресной строке (в поисковике-где адрес сайтов) вводим localhost/phpmyadmin

    2 в появившемся окне слева выбираем базу данных (ваш сайт), и появится список модулей (в том числе нужный нам jos_vm_category (может у вас он немножко по другому называется) -его и будем обрабатывать)

    3 в меню по центру выбираем SQL — появится "Выполнить SQL-запрос(ы) к базе данных biz: " в этом пространстве уже пишем, как тут советуют ооч добрые люди

    ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

    и внизу слева нажать ОК.

    у меня для категорий ВМ эта строка выглядела так:

    ALTER TABLE `biz`.`jos_vm_category` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

    где biz -это слева выбранная вами база данных-сайт

    а jos_vm_category — модуль, кодировку которого меняем, тут модуль категорий товара.

    зелененьким напишут «SQL-запрос был успешно выполнен»

    и вуаля — прописываем категории еще раз на сайте — и они уже на русском

    Спасибо автору за помощь

  34. Alex
    7 августа 2012 23:20 | №34

    Проблема осталась — в структуре таблиц отображается utf8_general_ci а при просмотре таблив в phpmyadmin отображаются кракозябры и сортировка нифига не работает. Но на сайт названия выбираются нормально. Как быть?

  35. Алексей
    17 сентября 2012 15:54 | №35

    Спасибо, передил сайт на utf8, немного подумав все перевел;)

  36. Дмитрий
    20 сентября 2012 12:07 | №36

    Большое спасибо

  37. 20 сентября 2012 16:30 | №37

    Что-то у меня не совсем все получается((( стоит кодировака latin1 нужно сделать чтобы русский присутствовал вместо крякозябров — я переделываю на win1251 по этому скрипту, а программа выдает сообщение: «Table 'information_schema' does not exist». использую MySQL-Front.

    Помогите, пожалуйста.

  38. 20 сентября 2012 16:40 | №38

    Евгений, тут одно из двух, либо у вас нету прав на доступ, либо повреждена таблица information_schema. Попробуйте запустить этот скрипт от имени пользователяя с root доступом к серверу MySQL.

  39. 20 сентября 2012 16:58 | №39

    Я извиняюсь, но в MySQL я не совсем силен, работал одно время с MS SQL Server через Management Studoi и такие сложные запросы не писал.

    Не могли бы Вы подробнее описать что мне нужно сделать?

    И таблицы information_schema я не наблюдаю в бд.

  40. 20 сентября 2012 18:08 | №40

    Если знаете пароль пользователя root (для MySQL), то делать все операции под этим пользователем.

    P.S. Суть работы системы прав практически не отличается в MySQL от системы прав в любом из других серверов БД (в том числе и в MS SQL).

  41. Даша
    2 ноября 2012 16:59 | №41

    Спасибо большое — очень просто все))) Очень помогло!!

  42. Сергей
    18 декабря 2012 4:18 | №42

    Спасибо!

    Помогло. :D

  43. Юрий
    22 декабря 2012 11:57 | №43

    Спасибо огромное! Несколько дней в ручную делал, а тут за пару минут раз и всё. :D

  44. Андрей
    24 декабря 2012 1:31 | №44

    Спасибо)))

  45. Сергей
    30 января 2013 12:13 | №45

    Спасибо! Помогло!!!

  46. 4 февраля 2013 0:54 | №46

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

  47. kyzya
    5 февраля 2013 18:26 | №47

    О великая лень! Двигатель прогресса. Спасибо автору за его гениальную лень!:)

  48. ghiya
    6 февраля 2013 11:56 | №48

    супер! спасибо огромное)

  49. Станислав
    6 февраля 2013 23:23 | №49

    Стоял старый openfire и у базы была кодировка в latin1_swedish_ci в принципе то ничего страшного текст отрабатывал кириллицу, но вот засада monitoring plugin нифига не показывал, любопытство в переписке, побороло стах накосячить :)

  50. Серёга
    28 февраля 2013 8:46 | №50

    отличная статья, помогла с экономить кучу времени...СПАСИБО АВТОРУ!!!

  51. Dr.Mahir
    4 марта 2013 5:23 | №51

    Спасибо! Помогло!!!

  52. Алексей
    11 марта 2013 16:03 | №52

    Спасибо, Царь и Бог,

    Ты так нам всем помогhttp://generaltea.ru/wp-content/plugins/smilies-themer/adiumicons/biggrin.png!

  53. Александр
    5 апреля 2013 6:37 | №53

    Спасибо. Отличная статья.

  54. Анна
    20 апреля 2013 15:06 | №54

    Подскажите в чем проблема может быть: после смены кодировки для таблиц и базы данных c utf8 на cp1251_general_ci при отображении на страничке сайта по-прежнему что-попало выводит((

  55. 20 апреля 2013 15:38 | №55

    utf-8 содержит два байта на символ, а cp1251 1 байт, похоже, что вы убили всю инфу с помощью такого перекодирования, и восстановлению не подлежит, только если у вас нету бекапа.

    Вообще-то все движеться как раз в сторону utf-8 то есть универсальности, зачем же вам понадобилось делать шаг назад?

  56. Анна
    20 апреля 2013 16:27 | №56

    было неверное отображение данных

    проблему уже решила — пользователю, который обращался к базе, отключила права администрирования и, о чудо! все наладилось. хотя почему — остается загадкой

  57. Алексей
    21 апреля 2013 12:21 | №57

    Спасибо, выручил!

  58. Вадим
    25 мая 2013 21:05 | №58

    Спасибо большое.

  59. Виталий
    15 июня 2013 13:43 | №59

    Спасибо, помогло.

  60. Иван
    12 августа 2013 8:01 | №60

    Супер!

    Спасибо огромное!

  61. №61
    12 августа 2013 23:48 | №61

    спасибо еще раз 8)

  62. maquatu
    24 августа 2013 0:13 | №62

    Присоединяюсь ко всем благодарным, большое спасибо за полезный совет.

  63. Костя
    18 сентября 2013 17:03 | №63

    Огромнейшее спасибо, очень помогло. Хорошо что есть такие люди как ты

  64. Екатерина
    19 сентября 2013 11:50 | №64

    О чудо!!!!Спасибо огромное!!!

  65. Тима
    20 ноября 2013 15:29 | №65

    реально, очень помогло, правда пришлось после выполнения запроса немного редактировать результат, но спасибо)

  66. Денис
    1 декабря 2013 22:54 | №66

    Спасибо огромное, очень помогло!

  67. Диня
    10 декабря 2013 13:45 | №67

    Я не понял а результирующий скрипт где?

  68. 10 декабря 2013 14:04 | №68

    в блоке кода :)

    берем копируем, меняем, если надо и наслаждаемся.

  69. Диня
    10 декабря 2013 14:40 | №69

    вот сюда мне этот блок кода можно разместить?

  70. Диня
    10 декабря 2013 14:58 | №70

    Сразу что ли?

  71. 10 декабря 2013 15:21 | №71

    а теперь попытаемся сформулировать вопрос более корректно и более понятно, а то как-то я сути не уловилю

  72. Олег
    4 марта 2014 9:05 | №72

    Добрый день! столкнулся с вот такой проблемой:

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

  73. Dima
    6 марта 2014 19:28 | №73

    Спасибо )

  74. Leva
    1 апреля 2014 18:39 | №74

    Автор, спасибо огромное

  75. Flopik
    12 апреля 2014 14:41 | №75

    Спасибо огромное!!!

    Я просто не знаю как бы я по отдельности поменял кодировку 287 строк:)))

  76. Ирина
    14 мая 2014 20:52 | №76

    Спасибо и от меня! 1500 таблиц...и все отлично:)

  77. Оливер
    27 мая 2014 10:20 | №77

    Тысячу раз спасло. Мой низкий поклон, дорогой автор)

  78. Алексей
    31 мая 2014 23:19 | №78

    Потратил на решение этого вопроса часов 20 если не больше и решил благодаря вам искренне спасибо!

  79. Дмитрий
    9 июля 2014 4:11 | №79

    Отличная статья, помог, Спасибо!

  80. Дмитрий
    28 января 2015 21:27 | №80

    Очень полезно, большое спасибо

  81. Дмитрий
    22 марта 2015 0:45 | №81

    Спасибо вам огромное, только ваш способ помог!

  82. mikel
    17 июня 2015 21:40 | №82

    Спасибо большое!!!

  83. Вячеслав
    19 июля 2015 0:07 | №83

    Спасибо, помог. Так бы мучался сидел

  84. iliya
    26 сентября 2015 16:43 | №84

    Спасибо!

  85. Илья
    16 октября 2015 18:49 | №85

    не работает

  86. 31 октября 2015 20:45 | №86

    Я в своё время намучился с этой кодировкой...

  87. Макс
    24 декабря 2015 15:13 | №87

    Спасибо, реально круто )

  88. 5 февраля 2016 1:31 | №88

    Спасибо огромное, кучу перерыл все туфта, тут тоже не сразу понял, что и как делать, т.к. только учусь. Все сработало, спасибо! А то 100+ таблиц ручками устал бы:)

  89. Altayr
    11 апреля 2016 16:42 | №89

    Спасибо добрый человек, обновил джумлу до 3.5 а тут таблицы не такие, и все не открывается хоть тресни и откатить уже не могу, выполнил ваши рекомендации и вуаля — и программа свежая и все работает, даже не знаю чтобы делал без таких инструкций. СПАСИБО!

  90. 11 апреля 2016 17:14 | №90

    очень рад что удалось помочь

  91. Антон
    12 апреля 2016 3:05 | №91

    Большое спасибо!

:D :) ^_^ :( :o 8) ;-( :lol: xD :wink: :evil: :p :whistle: :woot: :sleep: =] :sick: :straight: :ninja: :love: :kiss: :angel: :bandit: :alien: