# 1273-알 수없는 데이터 정렬 : 'utf8mb4_unicode_ci'cPanel


183

로컬 컴퓨터에 cPanel의 호스팅 phpMyAdmin으로 전송하려는 WordPress 데이터베이스가 있습니다. 그러나 데이터베이스를 환경으로 가져 오려고하면이 오류가 계속 발생합니다.

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

나는 주변에 구글을 시도하고 내가 찾을 수있는 유일한 해결책은이 하나의 phpmysql 오류-# 1273-# 1273-알 수없는 데이터 정렬 : 'utf8mb4_general_ci' . 쿠키를 지우려고했지만 여전히 작동하지 않습니다. 도와주세요!


답변:


107

모든 서버에서 이전 버전의 MySQL을 실행하는 것과 동일한 문제가있었습니다. 이것은 PHP 스크립트를 실행하여 해결할 수 있습니다. 파일에이 코드를 저장하고 데이터베이스 이름, 사용자 및 암호를 입력하여 실행하며에서 정렬을 변경할 수 있습니다 utf8mb4/utf8mb4_unicode_ciutf8/utf8_general_ci

<!DOCTYPE html>
<html>
<head>
  <title>DB-Convert</title>
  <style>
    body { font-family:"Courier New", Courier, monospace; }
  </style>
</head>
<body>

<h1>Convert your Database to utf8_general_ci!</h1>

<form action="db-convert.php" method="post">
  dbname: <input type="text" name="dbname"><br>
  dbuser: <input type="text" name="dbuser"><br>
  dbpass: <input type="text" name="dbpassword"><br>
  <input type="submit">
</form>

</body>
</html>
<?php
if ($_POST) {
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];

  $con = mysql_connect('localhost',$dbuser,$dbpassword);
  if(!$con) { echo "Cannot connect to the database ";die();}
  mysql_select_db($dbname);
  $result=mysql_query('show tables');
  while($tables = mysql_fetch_array($result)) {
          foreach ($tables as $key => $value) {
           mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
     }}
  echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}

?>

47
이 대 잔인한 것 같아mysqldump --compatible=mysql4
icc97

2
나를 위해 그것은 효과가있었습니다. 파일 이름을 지정해야합니다db-convert.php
Fred K

1
'localhost'를 입력하면 완벽합니다.
br4nnigan

2
mysqldump --compatible=mysql4또는 아래 답변이 더 나은 옵션입니다. 라이브 사이트에서 이와 같은 것을 변경하는 것이 현명한 생각이라고 생각하지 않습니다. 올바른 형식으로 내보내거나 옵션이 아닌 경우 내 보낸 파일을 편집하십시오.
Tisch

그래서 당신은 내 목숨을 구했고 내가 줄 수있는 것은 +1입니다.
Taruc

229

이 게시물의 기술은 저에게 효과적이었습니다.

1) 데이터베이스의 "내보내기"탭을 클릭하십시오

2) "사용자 정의"라디오 버튼을 클릭하십시오

3) "형식 별 옵션"섹션으로 이동하여 "다음과의 출력 호환성을 최대화하기 위해 데이터베이스 시스템 또는 이전 MySQL 서버 :"의 드롭 다운을 NONE에서 MYSQL40으로 변경하십시오.

4) 하단으로 스크롤하여 "GO"를 클릭하십시오.

이 작업을 수행하면 데이터가 손실되는지 확실하지 않지만 한 번 시도한 후에는 전혀 눈치 채지 못했습니다. 위의 포럼에서 응답 한 사람도 없었습니다.

편집 8/12 / 16- 이 방법으로 데이터베이스를 내 보내면 Black Studio TinyMCE Visual Editor 위젯에 저장된 데이터가 손실 되지만 확인을 위해 여러 테스트를 실행하지는 않았다고 생각합니다.


나를 위해 작동하지 않습니다. # 1231 오류가 발생했습니다-변수 'character_set_client'를 'NULL'의 값으로 설정할 수 없습니다
21:48의

다른 솔루션에서 여러 번 실패한 후에는 첫 번째 시도에서 완벽하게 작동했습니다.
Vincent Polisi

일부 새로운 Wordpress 사이트에서는 작동하지 않습니다. 다른 서버에서 가져올 때 가져 오려고 시도하는 첫 번째 테이블에서이 오류가 발생합니다 (wp_commentmeta) # 1064-SQL 구문에 오류가 있습니다. 올바른 구문은 MySQL 서버 버전에 해당하는 라인 19에 가까운 'TYPE =의 MyISAM AUTO_INCREMENT = 1'을 사용하는 설명서를 확인
이 - 벤

이것은 나에게 아무런 차이가없는 것처럼
보였지만

당신은 보스입니다
Aseel Ashraf

159

.sql파일 을 이미 내 보낸 경우 파일에 파일이 있으면 다음을 찾아서 바꾸는 것이 가장 좋습니다.

  • utf8mb4_0900_ai_ciutf8_unicode_ci
  • utf8mb4utf8
  • utf8_unicode_520_ciutf8_unicode_ci

그것은 대체 할 것이다 utf8mb4_unicode_ciutf8_unicode_ci. 이제 phpMyAdmin cPanel로 이동하여 Operations> Collationutf8_unicode_ci통해 DB 데이터 정렬을 설정하십시오 .

.sql내보내는 경우 파일을 내보내는 방법에 대한 형식을 변경하는 것이 좋습니다. Evster의 답변을 확인하십시오 (이 페이지와 같은 페이지에 있음).


2
그것은이 하나와 완벽하게 작동하고 있습니다. stackoverflow.com/a/30694416/1022726
iurii

모든 유닉스 사람들에게 : sed -i.bak s/utf8mb4/utf8/g FILE_NAME. utf8mb4FILE_NAME에서 모든 발생을 찾아서 utf8원본 파일의 사본을 FILE_NAME.bak에 저장하는 동안 대체합니다 . 당신의 경우에 정확한 연립을 지정하기 위해 그것을 조정해야 할 수도 있지만 이것은 시작입니다 :)
DaveLak

1
또한 utf8_unicode_520_ci를 다음과 같이 교체해야했습니다. utf8_unicode_ci
Nick Rivers

또는 vi : vi dump.sql를 통해 다음을 통해 수행하십시오 :%s/uf8mb4/utf8/g.
Valentin Grégoire의

2
및 교체 utf8_0900_ai_ci와 함께utf8_unicode_ci
이르판 Yusanif

44

나는 이것을 리눅스에서 사용한다 :

sed -i 's/utf8mb4/utf8/g' your_file.sql
sed -i 's/utf8_unicode_ci/utf8_general_ci/g' your_file.sql
sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' your_file.sql

그런 다음 your_file.sql을 복원하십시오.

mysql -u yourdBUser -p yourdBPasswd yourdB < your_file.sql

1
여기에 반복되는 다른 답변에 대한 의견이 있습니다. sed의 OS X 버전에는 -i 플래그 뒤에 추가 인수가 필요합니다. 그래서 sed -i '' ....작동합니다.
Kent

2
나도 이것을 실행해야했다 :sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
Michael Hays

28

Wordpress 4.2는 보안상의 이유로 "utf8mb4"문자 인코딩을 지원하지만 MySQL 5.5.3 이상 만 지원합니다. 설치 프로그램 (및 업데이터)이 처리하는 방식은 MySQL 버전을 확인하고 지원되는 경우에만 데이터베이스가 utfmb4로 업그레이드된다는 것입니다 입니다.

이론적으로는 훌륭하게 들리지만 utf8mb4를 지원하는 MySQL 서버에서 데이터베이스를 utf8mb4를 지원하지 않는 데이터베이스로 마이그레이션 할 때 문제가 발견되었습니다. 다른 방법은 효과가 있지만 기본적으로 단방향 작업입니다.

Evster가 지적한대로 PHPMYAdmin의 "내보내기"기능을 사용 하면 성공 했을 것입니다. " 내보내기 방법 : 사용자 정의 "및 " 데이터베이스 시스템 또는 이전 MySQL 서버에 다음과의 출력 호환성을 최대화 하려면"드롭 다운 선택 " MYSQL 40 " .

mysqldump를 사용하는 명령 행 내보내기. 깃발을보세요 :

$ mysqldump --compatible=mysql4

참고 : 데이터베이스에 4 바이트 문자가 있으면 손상됩니다.

마지막으로 인기있는 WP Migrate DB PRO 플러그인을 사용하는 사람이라면 누구나이 Wordpress.org 스레드의 사용자가 마이그레이션이 항상 올바르게 처리되지만 공식적인 것을 찾을 수 없다고보고합니다.

WP Migrate DB 플러그인은 5.5.3 이전 또는 이후 MySQL이있는 호스트간에 4.2 사이트를 이동할 때 데이터베이스를 한 데이터 정렬에서 다른 데이터 정렬로 변환합니다.

현재 데이터베이스 업데이트를 거부 할 수있는 방법이 없습니다. 따라서 MySQL이 5.5.3 이상인 서버 또는 로컬 호스트에서 이전 MySQL 버전을 사용하는 사이트로 사이트를 마이그레이션하는 워크 플로를 사용하는 경우 운이 좋지 않을 수 있습니다.


"MYSQL 40"으로 호환성을 변경하면 완전히 효과가있었습니다.
Keryn Gill

3
그런 다음 mysql4 호환 덤프를 포스트 v5.5.3 데이터베이스 (5.5.28을 사용하고 있음)로 가져 오면 스크립트 TYPE=MyISAM가 v5.1에서 제거 되었기 때문에 실패합니다 . 검색하고로 바꿉니다 ENGINE=MyISAM. mysqldump출력 옵션을 사용 하여이 문제를 해결할 수 없었습니다 .
icc97

26

내 경우에는 내 밝혀
새로운 서버가 실행 MySQL 5.5,
기존 서버가 실행되었다 MySQL 5.6. 이전 서버에서 내 보낸 파일
을 가져 오려고 할 때이 오류가 발생했습니다 .sql.

MySQL 5.5는 지원하지 utf8mb4_unicode_520_ci않지만
MySQL 5.6은 지원 합니다.

MySQL 5.6새 서버에서 업데이트하면 데이터 정렬 오류가 해결되었습니다!

MySQL 5.5를 유지하려는 경우 다음을 수행 할 수 있습니다
.-내 보낸 .sql파일 의 복사본 만들기
-인스턴스 교체 utf8mb4unicode520_ciutf8mb4_unicode_520_ci
...로 utf8mb4_unicode_ci
-업데이트 된 .sql파일 가져 오기


1
예-5.6으로 업로드하는 것이 가장 간단한 솔루션입니다 (그리고 Ubuntu에는 mysql-server-5.6자동으로 5.5를 제거 할 수 있는 패키지가 설치되어 있습니다).
William Turrell

15

wp-config.php에 다음 줄이 있습니다 :

define('DB_CHARSET', 'utf8mb4');

Markouver / Evster의 지침 을 따르는 경우 프로덕션 서버에서이 줄을 다음으로 변경하십시오.

define('DB_CHARSET', 'utf8');

깨진 4 바이트 문자를 수정하기 위해


1
또한 수정하는 것을 잊지 마십시오 define('DB_COLLATE', 'utf8_general_ci');. 이것은 나를 위해 도움이되었습니다.
Abduhafiz

10

오랜 연구 끝에 위의 해결책을 찾았습니다.

  1. 먼저 wp-config.php> Database DB_CHARSET 기본값을 "utf8"로 변경하십시오.

  2. 데이터베이스의 "내보내기"탭을 클릭하십시오

  3. "사용자 정의"라디오 버튼을 클릭하십시오

  4. "형식 별 옵션"섹션으로 이동하여 "다음과의 출력 호환성을 최대화하기위한 데이터베이스 시스템 또는 이전 MySQL 서버"드롭 다운을 NONE에서 MYSQL40으로 변경하십시오.

  5. 하단으로 스크롤하여 이동을 클릭하십시오.

그런 다음에 있습니다.


7

호스트가 utf8mb4 데이터 정렬을 사용하여 테이블을 실행할 수있는 MySQL 버전을 제공하지 않는 것 같습니다.

Emojis를 지원하기 위해 WordPress 테이블이 버전 4.2 (2015 년 4 월 23 일 릴리스)에서 utf8mb4로 변경되었지만 이를 사용하려면 MySQL 5.5.3이 필요합니다.5.5.3. 2010 년 3 월부터 제공되므로 일반적으로 널리 사용 가능해야합니다. 호스팅 업체가 해당 버전을 제공하는지 확인 하시겠습니까?

그렇지 않은 경우 업그레이드가 불가능한 경우 최신 WordPress 버전을 실행하기 위해 다른 호스팅 업체를 찾아야 할 수도 있습니다 (보안상의 이유로 항상 그렇게해야합니다).


1
"mysql -V"명령 줄을 통해 MySQL 버전을 확인할 수 있습니다
Edd Smith

2

그래서 MySQL 5.6에서 MySQL 5.5 까지이 방법으로 해결했습니다.

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

(선택 사항) .sql.gz파일을 작성 하십시오.

$ gzip database_name.sql 

설명

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql

답변 에서 설명했듯이 , 이것은 phpMyAdmin의 다음 옵션과 같습니다 : "데이터베이스 시스템 또는 이전 MySQL 서버와의 출력 호환성을 최대화합니다 :"드롭 다운 선택 "MYSQL 40" .

$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

이 문제를 해결하려면 다음이 필요합니다.

18 행의 오류 1064 (42000) : SQL 구문에 오류가 있습니다. 9 행의 'TYPE = InnoDB'근처에서 사용하기에 적합한 구문은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.


1
OS X의 sed 버전을 사용중인 경우 : $ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql. database_name.sql.baksed를 교체하기 전과 같이 사본을 보관하려면 :$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
Justin Fortier

인라인 할 수도 있습니다 sed.
davidbitton

또한 MySQL 8에서 mysqldump를 실행하는 경우 --compatible=ansi옵션
AbstractVoid


1

가장 쉬운 방법은 당신의 데이터베이스를 내보낼 수있다 .sql, 열을 메모장 ++과 "검색 및 바꾸기"는 utf8mb4_unicode_ciutf8_unicode_ci또한 교체 utf8mb4utf8. 또한 데이터베이스 데이터 정렬을 utf8_unicode_ci(작업> 데이터 정렬) 로 변경하는 것을 잊지 마십시오 .


0

Notepad ++에서 SQL 파일을 연 ctrl + H. 다음 utf8mb4검색에 " utf8"를 입력 하고 " "를 바꿉니다. 그러면 문제가 해결 될 것입니다.


"알 수없는 데이터 정렬 utf8"
Cristian Traìna
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.