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
'sourcecode' 카테고리의 다른 글
고정된 크기의 배열에 대한 포인터 배열 (0) | 2023.10.01 |
---|---|
SQLite에서 문자열 연결이 작동하지 않음 (0) | 2023.10.01 |
Skipy through pip을 설치할 수 없습니다. (0) | 2023.10.01 |
powershell: [ref] 변수에서 호스트 값을 쓰는 방법 (0) | 2023.10.01 |
C에서 구조물에 대한 포인터를 초기화하는 방법은? (0) | 2023.10.01 |