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_binMySQL utf8이 3바이트만 사용하는 실제 utf8이 아니라고 들었기 때문에 원합니다 .

쿼리나 명령을 편집하여 변경하려면 어떻게 해야 합니까? 현재 이는 기본 스웨덴어 데이터 정렬입니다.

MySQL 버전:

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

답변1

utf8mb4_bin"문자 집합"이 아닌 "데이터 정렬"입니다. 해당 문자 세트는 단순히 utf8mb4.

5.5 이전 버전에는 charset utf8mb4가 없습니다.

단순히 전체 데이터베이스의 모든 테이블의 모든 텍스트 컬럼을 변환하는 것은 불가능합니다.

그러면 단일 테이블의 모든 텍스트( VARCHAR및 ) 열이 변환됩니다 .TEXT

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

나는 문자 세트를 수정한 후에도 당신이 제안한 복잡한 mysql을 신뢰하지 않을 것입니다. 를 사용할 때 명확하지 않은 몇 가지 문제가 있습니다 -e. 대신 을 실행하여 SELECT의 목록을 생성한 ALTERs다음 이를 복사하여 에 붙여넣습니다 mysql.

"테이블"을 변경하면 기본 문자 세트만 변경됩니다.미래열을 추가할 수 있습니다.

CONVERT TO열을 변경합니다. 즉, 데이터의 인코딩을 변경하고 열 정의를 변경합니다. 현재 열이 있습니까 utf8? 어떤 버전의 MySQL을 실행하고 있나요?

관련 정보