sourcecode

MySQL 테이블을 UTF-8로 변경하려면 어떻게 해야 합니까?

copyscript 2023. 10. 1. 21:52
반응형

MySQL 테이블을 UTF-8로 변경하려면 어떻게 해야 합니까?

테이블과 데이터베이스에 대한 언어 설정이 여러 가지인 것으로 알고 있습니다.

저는 이미 데이터베이스를 만들었습니다.제가 만들었을 때 기본/LATIN이었던 것 같습니다.모든 걸 바꾸고 싶어요...표와 데이터베이스 모두 UTF-8에 적용할 수 있습니다.

어떻게 해야 하죠? 감사합니다.

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

alter 명령을 사용하여 문자 집합을 변경하는 방법을 살펴봅니다.

또 다른 유용한 링크: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html

일반적인 형태는

ALTER DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]

표의 특정 열에 대해

ALTER TABLE column COLLATE utf8_general_ci

aioobe의 답은 데이터베이스, 테이블 또는 열의 문자 집합을 변경하는 방법을 알려줍니다.당신이 명심해야 할 것은

  • 테이블의 문자 집합을 설정하면 해당 테이블의 새 열에 대한 기본 문자 집합만 지정됩니다.기존 열에 대한 문자 집합은 변경되지 않으며, 해당 열을 개별적으로 수행해야 합니다. 또는 테이블의 모든 문자열 유형 열을 동일한 문자 집합으로 변경하려면 다음과 같은 명령을 사용할 수 있습니다. "alter 테이블 ... 문자 집합으로 변환"(http://dev.mysql.com/doc/refman/5.1/en/alter-table.html )

  • 열에 잘못된 encoded로 저장된 데이터가 이미 있는 경우 "alter 테이블... modify"를 사용하여 열을 변경하면 문제가 해결되지 않습니다.예를 들어 UTF-8 데이터를 Latin1 열에 저장하고 문자 집합을 Latin1에서 UTF-8로 직접 변경하는 경우 이후에도 잘못된 인코딩이 됩니다.이는 이진법을 통해 라틴어-1에서 UTF-8로 변환함으로써 해결할 수 있습니다.

1) 데이터베이스 기본 문자 집합 및 대조:

SELECT @@character_set_database, @@collation_database;

다음을 통해 변경됨:ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;

2) 테이블 기본 문자 집합 및 대조:

SELECT T.table_name, CCSA.character_set_name 
FROM information_schema.TABLES T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA 
WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "YOUR_DB";`

다음을 통해 변경됨:ALTER TABLE [table_name] CHARACTER SET utf8 COLLATE utf8_general_ci

3) 열 문자 집합 및 대조:

SELECT c.TABLE_NAME, c.COLUMN_NAME, c.CHARACTER_SET_NAME, c.COLLATION_NAME 
FROM information_schema.COLUMNS c
WHERE c.table_schema = "YOUR_DB";`

다음을 통해 변경됨:ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

세 번째는 데이터 변환을 위해 외부 키 검사를 비활성화해야 합니다.이 모든 것을 종합해보면,

DELIMITER //
CREATE PROCEDURE migrate_charset_to_utf8()
  BEGIN
    DECLARE done TINYINT DEFAULT 0;
    DECLARE curr_table VARCHAR(64);

    DECLARE table_cursor CURSOR FOR
    SELECT T.table_name
      FROM information_schema.TABLES T
      WHERE T.TABLE_TYPE = 'BASE TABLE' AND
        T.TABLE_SCHEMA = 'YOUR_DB';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    OPEN table_cursor;

    table_loop: LOOP
      FETCH table_cursor INTO curr_table;
      IF done THEN
        LEAVE table_loop;
      END IF;

      # Convert table data(columns) charset
      SET @sql_str1 = CONCAT("ALTER TABLE ", curr_table, " CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
      PREPARE stmt1 FROM @sql_str1;
      EXECUTE stmt1;
      DEALLOCATE PREPARE stmt1;

      # Set table's default charset e.g for new columns added
      SET @sql_str2 = CONCAT("ALTER TABLE ", curr_table, " CHARACTER SET utf8 COLLATE utf8_general_ci");
      PREPARE stmt2 FROM @sql_str2;
      EXECUTE stmt2;
      DEALLOCATE PREPARE stmt2;

    END LOOP table_loop;

    CLOSE table_cursor;
  END//

DELIMITER ;


SET @@FOREIGN_KEY_CHECKS = 0;
CALL migrate_charset_to_utf8();
SET @@FOREIGN_KEY_CHECKS = 1;

ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;

편집: 대신 여기를 봅니다.

다음 내용을 my.cnf에 추가합니다.

[mysqld]
character-set-server=utf8
default-collation=utf8_unicode_ci

그리고 내 sqld daemon을 다시 시작합니다.

추가됨:

ALTER DATABASE your_base_name CHARACTER SET utf8 COLLATE utf8_unicode_ci;

그리고 my.cnf

SET collation_connection     = utf8_unicode_ci;
SET character_set_results    = utf8;
SET character_set_connection = utf8;
SET character_set_client     = utf8;

언급URL : https://stackoverflow.com/questions/2903318/how-do-i-change-a-mysql-table-to-utf-8

반응형