Я попробовал сделать это: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 вы используете?