2016-08-29 4 views
2

제 시스템이 스페인어 데이터를 처리합니다. 나는 laravel + mysql을 사용하고있다. 내 데이터베이스 데이터 정렬은 라틴입니다 - 기본 정렬 내 테이블 구조는 다음과 같은 :PHP + MySQL + 스페인어

  1. 내가 dB로 파일에서 데이터를로드 :

    CREATE TABLE `product` (
        `id` int(11) NOT NULL AUTO_INCREMENT, 
        `name` varchar(100) CHARACTER SET latin1 NOT NULL, 
    ) ENGINE=InnoDB AUTO_INCREMENT=298 DEFAULT CHARSET=utf8mb4; 
    

    몇 가지 질문이 있습니다. db에 삽입하기 전에 utf8_encode ($ name)을 사용하는 것이 좋습니다. 나는 현재 이렇게하고있다. 다른 비교 던지기 오류 : SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_unicode_ci,COERCIBLE) for operation '='

  2. utf8_encode를 사용하는 경우 이동하려면 utf8_encode도 검색하고 싶습니까? 예 : 선택 ... 이름 = utf8_encoded (이름)?

  3. 위의 사항을 처리하는 데 결함이 있거나 더 좋은 방법이 있습니까? 처음으로 스페인어를 할 때 (악센트가있는 문자).

+0

MySQL에서 'VARCHAR'은 기본적으로 UTF8 이었으므로 사용할 필요가 없다고 생각했습니다. 'utf8_encode'를 사용하십시오. –

+0

@MartinParkin은 utf8 인코딩없이 데이터를 삽입 할 때 발생하는 오류로 업데이트되었습니다. 그런 다음 = 필터를 사용하여 선택하십시오. – aiiwa

답변

0

귀하의 product.name 열은 문자 latin1을 설정할 수 있습니다. 너도 알 잖아. 또한 데이터 정렬은 latin1_swedish_ci입니다. 이것이 기본값입니다. MySQL의 원래 개발자는 스웨덴어입니다. 스페인어로 작업하기 때문에 데이터 정렬에 latin1_spanish_ci을 사용하고 싶을 수 있습니다. N 다음에 Ñ을 정렬합니다. 다른 라틴 언어 데이터 정렬은 이들을 함께 정렬합니다. 당신의 product.name 열이 라틴에 저장됩니다

때문에, 그 열을 저장하기 전에 텍스트 utf8_encode()를 사용하려면 나쁜 아니라 좋은, 생각입니다.

특히 응용 프로그램이 새로운 경우 가장 좋은 방법은 모든 열의 문자 집합을 utf8mb4으로 설정하는 것입니다. 즉, name 컬럼의 정의 된 문자 세트를 변경하는 것입니다. 그런 다음 텍스트 문자열을 저장하기 전에 유니 코드로 변환 할 수 있습니다.

각 표의 기본 데이터 정렬을 utf8mb4_spanish_ci으로 설정하는 것이 좋습니다. 데이터 정렬은 varchar() 열의 인덱스로 구워집니다. (ch이 별개의 편지 인 전통적인 스페인어로 작업하는 경우 utf8mb4_spanish2_ci을 사용하십시오.