MySQL 테이블의 기본 문자 집합을 변경하는 방법은 무엇입니까?
table
이 정의를 가져온 MySQL 이 있습니다 SQLYog Enterprise
.
Table Create Table
----------------- ---------------------------------------------------------
etape_prospection CREATE TABLE `etape_prospection` (
`etape_prosp_id` int(10) NOT NULL AUTO_INCREMENT,
`type_prosp_id` int(10) NOT NULL DEFAULT '0',
`prosp_id` int(10) NOT NULL DEFAULT '0',
`etape_prosp_date` datetime DEFAULT NULL,
`etape_prosp_comment` text,
PRIMARY KEY (`etape_prosp_id`),
KEY `concerne_fk` (`prosp_id`),
KEY `de_type_fk` (`type_prosp_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
default charset
이 테이블의을에서 latin1
으로 변경하고 싶습니다 utf8
. 그렇게하는 방법 ?
테이블 default character set
과 모든 문자 열을 새 문자 세트 로 변경하려면 다음 과 같은 명령문을 사용하십시오.
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
따라서 쿼리는 다음과 같습니다.
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;
테이블의 기본 문자 세트 변경 :
ALTER TABLE etape_prospection
CHARACTER SET utf8,
COLLATE utf8_general_ci;
문자열 열 문자 집합을 변경하려면 다음 쿼리를 수행하십시오.
ALTER TABLE etape_prospection
CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE
MySQL의 명령은 트릭을해야한다. 다음 명령은 테이블의 기본 문자 집합과 모든 열의 문자 집합을 UTF8로 변경합니다.
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
이 명령은 테이블의 모든 텍스트와 유사한 열을 새 문자 집합으로 변환합니다. 문자 집합은 문자 당 다른 양의 데이터를 사용하므로 MySQL은 일부 열의 유형을 변환하여 이전 열 유형과 동일한 수의 문자에 맞는 충분한 공간이 있는지 확인합니다.
라이브 데이터를 수정하기 전에 ALTER TABLE MySQL 문서 를 읽는 것이 좋습니다 .
누군가가 모든 데이터베이스 테이블의 기본 문자 집합을 변경하고 데이터를 변환하기위한 완전한 솔루션을 찾고 있다면 다음 중 하나 일 수 있습니다.
DELIMITER $$
CREATE PROCEDURE `exec_query`(IN sql_text VARCHAR(255))
BEGIN
SET @tquery = `sql_text`;
PREPARE `stmt` FROM @tquery;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;
END$$
CREATE PROCEDURE `change_character_set`(IN `charset` VARCHAR(64), IN `collation` VARCHAR(64))
BEGIN
DECLARE `done` BOOLEAN DEFAULT FALSE;
DECLARE `tab_name` VARCHAR(64);
DECLARE `charset_cursor` CURSOR FOR
SELECT `table_name` FROM `information_schema`.`tables`
WHERE `table_schema` = DATABASE() AND `table_type` = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET `done` = TRUE;
SET foreign_key_checks = 0;
OPEN `charset_cursor`;
`change_loop`: LOOP
FETCH `charset_cursor` INTO `tab_name`;
IF `done` THEN
LEAVE `change_loop`;
END IF;
CALL `exec_query`(CONCAT(
'ALTER TABLE `',
tab_name,
'` CONVERT TO CHARACTER SET ',
QUOTE(charset),
' COLLATE ',
QUOTE(collation),
';'
));
CALL `exec_query`(CONCAT('REPAIR TABLE `', tab_name, '`;'));
CALL `exec_query`(CONCAT('OPTIMIZE TABLE `', tab_name, '`;'));
END LOOP `change_loop`;
CLOSE `charset_cursor`;
SET foreign_key_checks = 1;
END$$
DELIMITER ;
이 코드를 파일 내부에 배치 chg_char_set.sql
하고 예를 들어 MySQL 터미널에서 호출하여 실행할 수 있습니다.
SOURCE ~/path-to-the-file/chg_char_set.sql
그런 다음 원하는 입력 매개 변수를 사용하여 정의 된 프로 시저를 호출합니다.
CALL change_character_set('utf8mb4', 'utf8mb4_bin');
결과를 테스트 한 후에는 해당 저장 프로 시저를 삭제할 수 있습니다.
DROP PROCEDURE `change_character_set`;
DROP PROCEDURE `exec_query`;
You can change the default with an alter table set default charset
but that won't change the charset of the existing columns. To change that you need to use a alter table modify column
.
Changing the charset of a column only means that it will be able to store a wider range of characters. Your application talks to the db using the mysql client so you may need to change the client encoding as well.
참고URL : https://stackoverflow.com/questions/8906813/how-to-change-the-default-charset-of-a-mysql-table
'program tip' 카테고리의 다른 글
연결되지 않고 설치됨 (0) | 2020.10.10 |
---|---|
Rails- 중첩 된 content_tag (0) | 2020.10.09 |
Python에서 unicode () 및 encode () 함수 사용 (0) | 2020.10.09 |
명령 줄을 통해 OS X에서 간단한 Hello World 프로그램 컴파일 (0) | 2020.10.09 |
바이트 배열을 Stream으로 변환하는 방법 (0) | 2020.10.09 |