내 데이터베이스에서 utf8_czech_ci 데이터 정렬을 사용하고 데이터베이스 연결을 설정하려고합니다. 기본값 인 utf8_general_ci가 필요하지 않으면 Mysqli_set_charset을 사용하여 데이터 정렬을 설정할 수 없습니다. Here은 먼저 mysqli_set_charset을 통해 charset을 설정 한 다음 SET NAMES를 통해 데이터 정렬을 설정하도록 제안되었습니다. 그래서 그것을했고 연결 정렬은 여전히 utf8_general_ci입니다.mysqli를 사용하여 데이터 정렬을 설정하는 방법은 무엇입니까?
편집 : 지금은 기본적으로 코드 YourCommonSense를 사용 제안 :
$spojeni=mysqli_connect('mysql01','username','password', 'my_database');
if (!$spojeni) die('Nepodařilo se připojit k databázi.');
mysqli_set_charset($spojeni,'utf8');
mysqli_query($spojeni, "SET COLLATION_CONNECTION = 'utf8_czech_ci';");
하지만, 난 그냥 Illegal mix of collations 오류에 직면했다. mysqli_get_charset()
을 통해 연결 정렬을 테스트하는 동안 내 데이터 정렬이 "utf8_general_ci"가 아니라 "utf8_czech_ci"가되어야한다는 것을 알았습니다. 이것은 원래 받아 들여진 응답이 신비한 이유로 작동하지 않는다는 것을 의미합니다. 필자는 localhost와 hosted server 모두에서 데이터베이스를 테스트 했으므로 데이터베이스를 선언 한 직후에도 데이터 정렬을 변경하는 오류가 발생하지 않는 것 같습니다.
그럼 어떻게 다른 방식으로 데이터 정렬을 변경 하시겠습니까? 보관상의 이유로
내 전 코드 :
$spojeni=mysqli_connect('mysql01','username','password');
if (!$spojeni) die('Nepodařilo se připojit k databázi.');
mysqli_query($spojeni, "USE my_database");
mysqli_set_charset($spojeni,'utf8');
mysqli_query($spojeni, "SET NAMES 'utf8' COLLATE 'utf8_czech_ci';");
EDIT2 : show variables like "%collation%";
이 collation_connection
utf8_general_ci
등의 값을 보여줍니다; 다른 데이터 정렬 변수는 utf8_czech_ci
으로 설정됩니다. Adminer에서이 명령을 실행하면 SET NAMES
또는 SET COLLATION_CONNECTION
(정확한 구문은 위 코드의 마지막 줄 참조) 중 하나를 실행 한 후에 만 collation_connection
에 utf8_czech_ci
이 표시됩니다. PHP 코드에서 show variables
을 (mysqli_query
을 통해) 실행하면 utf8_czech_ci
으로 표시되지만 테이블에서 선택한 값과 클라이언트가 설정 한 값을 비교하면 여전히 illegal mix of collations에 대해 불평합니다.
내 세부 사항은 내 related question입니다.
EDIT3 : a good workaround for the errors을 찾았습니다. 나는 아직도 Adminer와 Mysqli 쿼리에 나타난 변수의 차이점을 이해하지 못한다. 그러나 나는 이미 follow-up question에 질문했다. 나의 의혹과는 달리, 원래 받아 들여진 답변은 적어도 대부분은 효과가 있으므로 다시 받아들입니다.
그것은 오류를 던져서, 나는 적절한 해결책을 찾았고 (http://stackoverflow.com/a/13101585/1801588), 그것이 작동하고 코드를 수정했는지 테스트했다. 어쨌든, 당신의 답은 저에게 해결책을 안내해주었습니다. 그래서 +1하고 받아 들였습니다. –
그래, 나는 = 기호를 깜빡했다. 이제 작동합니다. 다른 대답과 같이 의미를 거의 이해하지 못하는 스팸 일뿐만 아니라 적절한 명령을 사용해야합니다. –
이 답변은 더 이상 유효하지 않은 것 같습니다. 내 질문 편집을 참조하십시오. –