2017-11-21 25 views
0

일부 테이블과 열을 명시 적으로 데이터 정렬로 정의했다 : MySQL은 테이블에서 데이터 정렬 사양을 제거하고 열을 내 DB에서

CREATE TABLE `MyTable` (
    `MyTableId` int(11) NOT NULL AUTO_INCREMENT, 
    `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL, 
    PRIMARY KEY (`MyTableId`), 
    ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; 

지금

ALTER DATABASE `MyDatabase` CHARACTER SET latin1 COLLATE latin1_general_ci; 

이 그 것이다 데이터베이스 레벨의 디폴트의 캐릭터 세트 및 데이터 정렬을 정의 (테이블을 다시 만들 필요없이) 데이터 정렬을 제거 할 수 있으므로 데이터베이스의 기본 설정을 사용하는 것이 분명합니다. 테이블 대신이있을 때는 스크립트를

CREATE TABLE `MyTable` (
    `MyTableId` int(11) NOT NULL AUTO_INCREMENT, 
    `CommandName` varchar(255) NOT NULL, 
    PRIMARY KEY (`MyTableId`), 
    ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=latin1; 

가 정렬 값을 지정하지만하지 않고 시도 스크립트는 데이터베이스 같은

ALTER TABLE MyTable MODIFY CommandName varchar(255) 
+0

가능한 복제 [? 데이터베이스의 기본 데이터 정렬을 변경하는 방법 (https://stackoverflow.com/questions/5906585/ 기본 데이터베이스 변경 방법 –

+0

@SebastianBrosch, 아니요,이 게시물의 복제본이 아닙니다. 내가 말했듯이, ALTER로 시도했지만 원하는 결과를 얻지 못했습니다. – Riga

답변

0

각 컬럼의 캐릭터 세트 및 데이터 정렬이 중요한 물건입니다 때. 테이블 및 데이터베이스의 설정은 이며 새 열이나 테이블을 repsectively 추가 할 경우 기본값은입니다. 그냥 CHARACTER SET latin1을 말한다면, 당신은 COLLATION latin1_swedish_ci를 얻을

mysql> SHOW COLLATION LIKE '%latin1%'; 
ERROR 2006 (HY000): MySQL server has gone away 
No connection. Trying to reconnect... 
Connection id: 1503849 
Current database: pantheon 

+-------------------+---------+----+---------+----------+---------+ 
| Collation   | Charset | Id | Default | Compiled | Sortlen | 
+-------------------+---------+----+---------+----------+---------+ 
| latin1_german1_ci | latin1 | 5 |   | Yes  |  1 | 
| latin1_swedish_ci | latin1 | 8 | Yes  | Yes  |  1 | 
| latin1_danish_ci | latin1 | 15 |   | Yes  |  1 | 
| latin1_german2_ci | latin1 | 31 |   | Yes  |  2 | 
| latin1_bin  | latin1 | 47 |   | Yes  |  1 | 
| latin1_general_ci | latin1 | 48 |   | Yes  |  1 | 
| latin1_general_cs | latin1 | 49 |   | Yes  |  1 | 
| latin1_spanish_ci | latin1 | 94 |   | Yes  |  1 | 
+-------------------+---------+----+---------+----------+---------+ 

참고 :

기본 (예 : 라틴 등) 지정된 캐릭터 세트에 대한 정렬을 참조하십시오.

귀하의 질문은 명시된 바와 같이 latin1_general_ci에서 latin1_swedish_ci으로 변경하는 방법에 관한 것입니다. 그것이 정말로 원하는 것이라면, 테이블을 다시 빌드해야합니다. 열에서 변경된 CHARACTER SET 또는 COLLATION은 재구성이 필요합니다. 기본값 인을 변경하면 침해가 덜합니다.

각 열에 대해 CHARACTER SETCOLLATION을 명시 적으로 지정하면 "기본값"이라는 미묘한 문제를 알 필요가 없습니다. (질문에 따라 그 의미로)

결론 :

ALTER TABLE MyTable 
    MODIFY `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL; 
+0

다음과 같은 문장이 있습니다 :'ALTER TABLE \'MyTable \'문자 세트로 변환 latin1;''CommandName' 열을'latin1_general_ci'에서'latin1_swedish_ci'로 변경할 수 있습니까? 재건하지 않고?. – wchiquito

+0

열의 데이터 정렬을 변경하면 _by any means_ 해당 열을 포함하는 모든 인덱스를 다시 작성해야합니다. 인덱스가 인덱스에서 사용되지 않을 때 다시 작성해야하는지 여부는 알 수 없습니다. –