2017-04-26 6 views
0

내가 할 :PHP의 MYSQLI 잘못 캐릭터 세트

$conn->real_connect($host,$user,$pass,$someUTF8Schema);

은 그 때 나는 인쇄 전에서 무엇을 얻을 :

문자 집합 = "라틴"

$conn->get_charset()

그것은이다 데이터 정렬 = "latin1_swedish_ci"

내 스키마 및 DB의 모든 테이블이 utf8인데도.

그것을 증명하기 위해, 나는 수행

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = $someUTF8Schema; 
-> 
# DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
'utf8', 'utf8_unicode_ci' 

왜 PHP MySQLi 잘못된 정렬을 반환? 감사!

+0

DB 테이블 수준에서 다른 charset을 정의 할 수 있다고 생각합니다. – MaxZoom

답변

0

조정해야 할 여러 가지가 있습니다.

  1. PHP에서 조작하는 문자는 무슨 인코딩입니까?
  2. 연결 전화 또는 set_charset 또는 SET NAMES을 통한 인코딩이 MySQL에 알려 졌습니까?
  3. get_charset()을 통해 가져올 수 있습니다.
  4. 그러나 데이터베이스/테이블/컬럼과 동일 할 필요는 없습니다 -
  5. 데이터베이스를 작성, 해당 데이터베이스에 새로운 테이블에 대한 기본 캐릭터 세트를 설정할 수 있습니다.
  6. 테이블을 만들 때 해당 테이블에서 의 charset을 명시 적으로 지정하여 해당 기본값을 재정의 할 수 있습니다.
  7. 열을 지정할 때 해당 열의 charset을 명시 적으로 지정하여 해당 기본값을 재정의 할 수 있습니다.
  8. 삽입 된 INSERTing 바이트가 단계 2에 따라 해석되면 열의 문자 세트 (# 7)로 변환됩니다.
  9. 마찬가지로 SELECTing 인 경우 필요에 따라 문자가 다시 변환됩니다 (# 7 -> # 2).

참고로, COLLATION, 단지 CHARACTER SET은 언급하지 않았습니다. 그들은 다른 동물입니다. COLLATION은 주어진 CHARACTER SET의 문자를 비교하는 방법을 참조하십시오.

Trouble with utf8 characters; what I see is not what I stored의 모범 사례 섹션을 참조하십시오.