2012-02-23 8 views
3

특수 문자가있는 단어를 데이터베이스에 삽입하는 데 문제가 있습니다. 단어는 특수 문자에서 잘린 것처럼 보입니다.PHP/Mysql 특수 문자 삽입이 잘림

MySQL 5.1.41을 사용하고 있습니다. 데이터베이스의 데이터 정렬은 utf8_general_ci입니다. 데이터베이스 상호 작용을 용이하게 PDO를 사용하고 있습니다.

다음은 내가하는 일의 예입니다.

//$db is a PDO object 
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'"); 
//word with a special character 
$word = "pépite"; 
$sql = "INSERT INTO keyword(key_name) VALUES(?)"; 
$stmt = $db->prepare($sql); 
$stmt->execute(array($word)); 

이 작업을 수행하면 데이터베이스에 "p"가 생기며 문자가 잘린 다음 모든 문자가 잘린 것처럼 보입니다. 내가 여기서 잘못하고있는 것이 확실하지 않습니다. 누구든지 제가 잘못하고있는 것을 제안 할 수 있다면 그것은 대단히 감사하겠습니다. 감사! |

+0

아마도 mysql을 쓰는 대신에 mysqli 클라이언트를 사용하고 계십니까? – Treffynnon

+0

매번 한 문자 씩 잘라내거나 특수 문자까지 모든 것을 저장하고 있습니까? – MetalFrog

+1

테이블 구조는 무엇입니까? – MMM

답변

7

$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'"); 
$word = utf8_encode('pépite'); 
$sql = "INSERT INTO keyword(key_name) VALUES(?)"; 
$stmt = $db->prepare($sql); 
$stmt->execute(array($word)); 

utf8_encode 시도 utf8_decode

+0

예,이 덕분에 많은 도움이되었습니다. 왜 내가 utf8로 인코딩해야하는지 알려주시겠습니까? 그 문자열은 이미 utf8이 아니십니까? – TheMethod

+1

아니요, ñáéíóú ...와 같은 특수 문자를 해당 기능으로 인코딩해야합니다. 저는 아르헨티나 출신입니다. (제 모국어는 스페인어입니다.) 그래서이 문제를 해결했습니다. 예를 들어 UTF8에서 é = Ã ©. – Juanma