LEFT(str, 1)
になっている:あなたは、その後のようなものを取得するにはUTF-8文字セットを指定するCHAR機能を使用することができ、背中の文字を取得するには
SELECT DISTINCT ORD(T1.Name) AS firstCode
:あなたのような何かを行うことができます左端文字、左端ではありませんバイトです。これは、たとえ最初の文字がマルチバイト文字であっても、クエリが望んでいることを意味します。
接続/エンコーディング/フォント/レンダリングの問題により、後で 記号が出現すると思います。文字列が占めるので、このクエリはあなたに2以上のいずれかの結果が得られるならば、これはLEFT()
が実際にマルチバイト文字を返していることを意味し、あなたの問題は、クエリ自体向こうにあるどのように多くのバイト
SELECT LENGTH(LEFT(T1.Name, 1)) AS charLength
LENGTHの戻りを試してみてください。
コマンドラインでクエリを実行している場合、端末が文字をレンダリングできないか、そうでなければどこかで文字化けしている可能性があります。スクリプティング言語を使用している場合は、その言語の文字列の長さとord()
関数を使用して、何が起こっているのかを調べてください。
EDIT:結果は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を使用しているので、これを試してみてください。実際にこのようなことが起こった場合、PHPはマルチバイト文字を正しく取得していますが、問題はWebページ自体のエンコーディング(this W3C page参照)か、ブラウザ/フォントがその特定の文字をレンダリングできません。
そうですね、これも私が疑うところです。私の答えのコメントを参照してください。私はその間にLEFTも試しましたが、マルチバイトも認識しています。 –
実際、charの長さとして2が返されました。ヘッドアップをありがとう! // PHPを使用して結果を表示しています。 – turezky