2011-10-26 1 views
2

레일 버전 3.0.10에서 jruby를 실행 중입니다. 필자는 어떻게 든 활발한 레코드 마이그레이션이 모든 varchar 열에 대해 utf8_bin 콜백을 생성한다는 것을 알았습니다.
는 쇼는 테이블 사용자를 생성 내가 않을 때 :Rails Active Record 마이그레이션이 mysql의 varchar 열에 대해 COLLATE utf8_bin을 생성 한 이유

CREATE TABLE `users` (
    `id` int(11) not null AUTO_INCREMENT default NULL, 
    `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin not null default '', 
    `remember_created_at` datetime, 
    `sign_in_count` int(11) default 0, 
    `current_sign_in_at` datetime, 
    `last_sign_in_at` datetime, 
    `current_sign_in_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin default NULL, 
.... 

누구나 아이디어를 가지고 왜, 어떻게 그것을 해제?

+0

'db/schema.rb'에 정의 된대로 표를 표시 할 수 있습니까? Rails의 소스를 보면 어디로 설정했는지 알 수 없습니다. –

답변

4

utf8_bin 데이터 정렬은 대소 문자를 구분하는 모드에서 각 문자의 이진 값으로 문자열을 비교하는 데 사용됩니다. charset 또는 collation이 사용되는 데이터베이스의 로컬 설정에 따라 달라질 수 있습니다. MySQL 데이터베이스에 대한 예를 들어, 귀하의 경우에는 ..이 하나를 사용하여 다음과 MySQL의 명령에 의해

mysql> show variables like '%collation%'; 
+----------------------+-------------------+ 
| Variable_name  | Value    | 
+----------------------+-------------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | latin1_swedish_ci | 
| collation_server  | latin1_swedish_ci | 
+----------------------+-------------------+ 

mysql> SELECT COLLATION(VERSION()); 
+----------------------+ 
| COLLATION(VERSION()) | 
+----------------------+ 
| utf8_general_ci  | 
+----------------------+ 

.. 또는 당신의 MySQL 데이터베이스의 데이터 정렬 모드를 확인할 수있는 하나의 이 값은 utf8_bin이어야합니다. 데이터베이스의 일반적인 값은 구성 파일에서 설정할 수 있습니다. 아마도 MySQL의 경우 my.cnf 일 것입니다. 마이그레이션 옵션을 사용할 수있는 특정 엔진, 캐릭터 세트 또는 조합으로 MySQL의 테이블을 만들려면 : 문서에 따르면

create_table :users, 
     :options => 'ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci' 
     ... 

table character set and collation는 MySQL의 확장은 표준 SQL에서 그런 일이 없습니다 있습니다.

관련 문제