найти все столбцы базы данных со значением% latin1% - PullRequest
0 голосов
/ 22 сентября 2018

Как я могу выполнить этот SQL-запрос?

Имя База данных: база данных_1Колонка: сопоставлениеЗначение: latin1_swedish_ci

Мне нужен список ВСЕХ таблиц «database_1», в которых есть столбцы, значение которых содержит текст% latin1%.

Моя конечная цель: мне нужно изменить эти значения во всех таблицах, которые содержатэти данные, например:

CHARACTER SET latin1 COLLATE latin1_swedish_ci

Изменить на:

CHARACTER SET utf8 COLLATE utf8_unicode_ci

У меня уже есть консультация, готовая к замене:

ALTER TABLE `blog_sitemapconf` CHANGE `value` `value` VARCHAR(100) CHARACTER SET latin1 COLLATE latin1_english_ci NOT NULL DEFAULT '';

Но мне нужно получитьимя всех таблиц, содержащих столбцы с

CHARACTER SET latin1 COLLATE latin1_swedish_ci

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Сначала определите, как вы будете выполнять преобразование кодировки. Если таблица правильно закодирована в latin1, то это желаемое преобразование:

 ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;

Если вместо этого у вас есть utf8 байтов, хранящихся в столбцах latin1, тогда 'fix' более сложный .

Однако это меняет все столбцы CHAR / TEXT в таблице.Это нормально?

Если все в порядке, тогда будут сгенерированы все ALTERs.

SELECT DISTINCT
       CONCAT("ALTER TABLE ", table_schema, ".", table_name,
              " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;")
    FROM   information_schema.columns
    WHERE  character_set = 'latin1'
      AND  table_schema NOT IN ('mysql', 'information_schema', 'performance_schema');

Затем вы можете скопировать / вставить их в инструмент командной строки mysql.

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

0 голосов
/ 22 сентября 2018

Вы можете запросить эту информацию из таблицы information_schema.columns:

SELECT table_name, column_name
FROM   information_schema.columns
WHERE  collation_name LIKE '%latin1%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...