Измените набор символов и сопоставление во всех столбцах во всех таблицах в MySQL

От Вашего вопроса и последующих комментариев это кажется, что Вы не получаете интервью. Если Вы не получаете интервью затем, определенно необходимо работать над тем резюме. Это - тяжелая работа, но необходимо адаптировать резюме для перечисленных положений, также ввести события, которые Вы можете иметь, которые не являются строго связанной технологией. Как пример, компания сетевых служб, ища инженера для обслуживания их клиентов могла бы найти продажи или персональные мягкие навыки важными. Необходимо подчеркнуть сильные моменты и получить интервью.

Если Ваши события кажутся слабыми, Вы думали о добровольно вызывающихся ИТ-услугах в некоммерческой организации? Если у Вас есть что-то, что показывает, что Вы работаете над технологией в "производственной" среде, может помочь.

18
задан 16 September 2009 в 18:31
5 ответов

В первую очередь, не делайте просто честное слово! Проверьте мое предложение с этим:

select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' charset=utf8;') from information_schema.TABLES WHERE TABLE_SCHEMA != 'information_schema' limit 10; select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',COLUMN_NAME,' charset=utf8;') from information_schema.COLUMNS WHERE TABLE_SCHEMA != 'information_schema' limit 10;

Если Вы чувствуете себя хорошо с результатом этого, удаляете предельные пункты и сохраняете вывод к сценарию SQL или, становитесь необычными и передаете вывод по каналу непосредственно к mysql, подобному тому, что я демонстрирую здесь. Это было бы похоже на это:

mysql -B -N --host=prod-db1 --user=admin --password=secret -e "select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' charset=utf8;') from information_schema.TABLES WHERE TABLE_SCHEMA != 'information_schema'; select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',COLUMN_NAME,' charset=utf8;') from information_schema.COLUMNS WHERE TABLE_SCHEMA != 'information_schema';" | mysql --host=prod-db1 --user=admin --password=secret

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

16
ответ дан 2 December 2019 в 20:25
  • 1
    Почти там! Но can' t разбираются в синтаксисе –  The Disintegrator 16 September 2009 в 17:26
  • 2
    хорошо I' ve получил его. I' m добавление корректного синтаксиса к ответу. Ваши правила идеи –  The Disintegrator 16 September 2009 в 18:17

Можно использовать information_schema база данных для нахождения столбца и таблицы необходимо измениться. Можно найти их с:

SELECT table_name, column_name FROM information_schema.`COLUMNS`
WHERE table_schema='your database' AND collation_name LIKE 'latin%';

Затем можно автоматизировать изменение со сценарием SQL, процедурой хранилища или с предпочтительным языком разработки.

0
ответ дан 2 December 2019 в 20:25

На самом деле можно использовать, ПРЕОБРАЗОВЫВАЮТ В на таблице, чтобы иметь его, преобразовывают все столбцы в той таблице к набору символов и сопоставлению.

SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'databasename';

Кроме того, имеет больше смысла мне выбирать фактическую базу данных, на которой Вы хотите сделать это. Так это:

... WHERE TABLE_SCHEMA = 'databasename';

вместо этого:

... WHERE TABLE_SCHEMA != 'information_schema';

Но я предполагаю, хотели ли Вы действительно сделать это на всех таблицах, Вы могли бы использовать первого. Кажется немного жестоким мне все же.:)

4
ответ дан 2 December 2019 в 20:25

Чтобы изменить параметры сортировки для всех столбцов, которые я использовал

SELECT CONCAT(  'ALTER TABLE ',  `TABLE_NAME` ,  ' CHANGE `',  `COLUMN_NAME` ,  '` `',`COLUMN_NAME` ,  '` ',  `DATA_TYPE` ,  '(',  `CHARACTER_MAXIMUM_LENGTH` ,  ') CHARACTER SET utf8 COLLATE utf8_swedish_ci ;' ) FROM  `COLUMNS` WHERE  `TABLE_SCHEMA` =  <schema> AND  `COLLATION_NAME` !=  'utf8_swedish_ci' ORDER BY  `TABLE_NAME` ,  `ORDINAL_POSITION` ;
1
ответ дан 2 December 2019 в 20:25

В итоге я сделал следующее:

  • скопировал базу данных в файл sql, используя mysqldump db_name> db_name.sql
  • заменил кодировку в файле sql с помощью awk sed -i - e 's / old_charset / new_charset / g' db_name.sql
  • импортировать этот новый файл базы данных mysql

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

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

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

0
ответ дан 12 January 2020 в 09:31

Теги

Похожие вопросы