PDO_ODBC가 Access UTF-8 악센트 문자를 검색하지 못했습니다.
문제 설명
다음을 시도하세요. Access를 사용하여 데이터베이스를 MySQL로 변환하면 모든 것이 잘 작동하지만 심각한 문제가 발생합니다. Access 데이터베이스에 비표준 문자가 포함되어 있으면 변환이 실패합니다. 쿼리는 다음 오류를 반환합니다.
Incorrect string value: '\xE9d'
"잘못된" 문자가 포함된 텍스트 줄을 직접 출력하면 브라우저는 검은색 사각형 안에 물음표를 표시합니다(따라서 é는 잘못된 기호가 됩니다).
참고: 이 데이터베이스 업로드 제목의 텍스트 상자에 "é"를 수락, 저장 및 표시하는 데 동일한 양식이 잘 작동합니다. 또한 페이지를 "다른 이름으로 저장"하고 다시 열면 "é"가 올바르게 표시됩니다.
연결 방법은 다음과 같습니다.
$conn = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=$fileLocation;SystemDB=$securefilePath;Uid=developer;Pwd=pass;charset=utf;");
다음을 포함한 여러 방법을 시도했습니다.
$conn -> exec("set names utf8");
Access에서 "CurrentDb.CollatingOrder"를 시도하면 1033이 표시됩니다. , 분명히 이것은 "영어, 독일어, 프랑스어 및 포르투갈어 정렬 규칙"에 대한 dbSortGeneral입니다.
무슨 일이 있었나요? 내 브라우저와 PHP가 완전히 이해하지 못하는 교정 내용을 PDO가 나에게 보내는 것 같습니다.
문제 해결
1. 간단하지만 불완전한 수정
사실 Access ODBC에서 반환한 텍스트가 ODBC와 다릅니다. Windows 이 문자는 Access 데이터베이스에 유니코드 문자로 저장되어 있더라도 -1252 문자 인코딩과 일치합니다. 따라서 예제 테이블 "Teams"의 경우
Team ----------------------- Boston Bruins Canadiens de Montréal Федерация хоккея России
코드
<code class="php">header('Content-Type: text/html; charset=utf-8'); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Access character test</title> </head> <body> <?php $connStr = 'odbc:' . 'Driver={Microsoft Access Driver (*.mdb)};' . 'Dbq=C:\Users\Public\__SO\28311687.mdb;' . 'Uid=Admin;'; $db = new PDO($connStr); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT Team FROM Teams"; foreach ($db->query($sql) as $row) { $s = $row["Team"]; echo $s . "<br/>\n"; } ?> </body> </html></code>
가 브라우저에 표시됩니다
Boston Bruins Canadiens de Montr�al ????????? ?????? ??????
2.
수정 UTF-8 전체 지원을 받으려면 ADODB 연결 및 다음과 같은 레코드 세트 개체와 함께 COM을 사용해야 합니다.
<code class="php">header('Content-Type: text/html; charset=utf-8'); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Access character test</title> </head> <body> <?php $connStr = 'Driver={Microsoft Access Driver (*.mdb)};' . 'Dbq=C:\Users\Public\__SO\28311687.mdb'; $con = new COM("ADODB.Connection", NULL, CP_UTF8); // specify UTF-8 code page $con->Open($connStr); $rst = new COM("ADODB.Recordset"); $sql = "SELECT Team FROM Teams"; $rst->Open($sql, $con, 3, 3); // adOpenStatic, adLockOptimistic while (!$rst->EOF) { $s = $rst->Fields("Team"); echo $s . "<br/>\n"; $rst->MoveNext; } $rst->Close(); $con->Close(); ?> </body> </html></code>
위 내용은 PDO_ODBC가 Access에서 UTF-8 악센트 문자를 검색하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!