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

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

Я попробовал сделать это:https://serverfault.com/a/65572/603515

Но я немного изменил его, чтобы он касался только той базы данных, которую я хочу изменить.

mysql -B -N --host=localhost --user=root --password=secret \
      -e "select CONCAT('alter table ',TABLE_SCHEMA,'.',
          TABLE_NAME,' charset=utf8mb4_bin;')
        from information_schema.TABLES WHERE TABLE_SCHEMA = 'usda_nndsr'; 
     select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',
         COLUMN_NAME,' charset=utf8mb4_bin;')
         from information_schema.COLUMNS WHERE TABLE_SCHEMA ='usda_nndsr';" |
     mysql --host=localhost --user=root --password=secret

но он говорит мне:

mysql: mysql: [Warning] Using a password on the command line interface can be insecure.[Warning] Using a password on the command line interface can be insecure.

ERROR 1115 (42000) at line 1: Unknown character set: 'utf8mb4_bin'

Я хочу, utf8mb4_binпотому что слышал, что MySQL utf8 — это не настоящий utf8, использующий только 3 байта.

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

Версия MySQL:

$ mysql -V
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper

решение1

utf8mb4_binэто "Collation", а не "character set". Соответствующий charset просто utf8mb4.

Версии до 5.5 не имели кодировки utf8mb4.

Невозможно просто преобразовать все текстовые столбцы всех таблиц во всей базе данных.

Это преобразует все текстовые ( VARCHARи TEXT) столбцы одной таблицы:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

Я бы не доверял сложному mysql, который вы предлагаете, даже после исправления набора символов. Есть несколько проблем, которые мне не ясны при использовании -e. Вместо этого я бы запустил , SELECTчтобы сгенерировать список ALTERs, а затем скопировал и вставил их в mysql.

Изменение «таблицы» изменяет только набор символов по умолчанию для любогобудущеестолбцы, которые вы можете добавить.

CONVERT TOизменяет столбцы -- как изменяя кодировку в данных, так и изменяя определение столбца. Столбцы в настоящее время utf8? Какую версию MySQL вы используете?

Связанный контент