LEFT(str, 1)
을하도록되어 당신이 뭔가를 할 수 있습니다 가장 왼쪽 문자, 가장 왼쪽이 아닌 바이트. 즉, 첫 번째 문자가 멀티 바이트 문자 인 경우에도 쿼리가 원하는 것을 수행하고 있음을 의미합니다.
연결/인코딩/글꼴/렌더링 문제로 인해 기호가 추측됩니다. 이 쿼리는 2 이상의 어떤 결과를 제공하는 경우 있도록 문자열, 소요 얼마나 많은 바이트
SELECT LENGTH(LEFT(T1.Name, 1)) AS charLength
길이 반환을 시도,이 LEFT()
이 멀티 바이트 문자를 반환 실제로는 것을 의미하고 문제는 쿼리 자체 너머 .
명령 줄에서 쿼리를 실행하는 경우 터미널에서 문자를 렌더링 할 수 없거나 그렇지 않으면 다른 곳에서 엉망이 된 것입니다. 스크립팅 언어를 사용하는 경우 해당 언어의 문자열 길이 및 ord()
함수를 사용하여 무슨 일이 일어나는지 알아보십시오.
편집 : 당신이 PHP를 사용하고 있기 때문에, 이것을 시도 :
예를 들어 결과가
this character은 다음 "0xC4 0x9E"를 받아야이다
//Store a character returned from the database in $unicodechar
$unicodechar = $row[0];
//Now print out the value of each byte in the character
for($i = 0; $i < strlen($unicodechar); $i++)
{
echo '0x' . dechex(ord($char[$i])) . ' ';
}
echo '\n';
합니다. 실제로 이런 종류의 것을 얻으면, PHP는 멀티 바이트 문자를 올바르게 가져오고, 문제는 웹 페이지 자체의 인코딩 (this W3C page 참조)이거나 브라우저/글꼴이 특정 문자를 렌더링 할 수 없다는 것입니다.
맞아,이게 내가 의심하는 바야. 내 대답에 주석을보십시오. 그 동안 나는 LEFT도 시도했고 멀티 바이트 인식도합니다. –
실제로 char의 길이를 2로 반환했습니다. 머리를 주셔서 감사합니다! // PHP를 사용하여 결과를 봅니다. – turezky