LEFT(str, 1)
是應該的最左邊的字符,不是最左邊的字節。這意味着即使第一個字符是多字節字符,查詢仍在做你想要的。
由於連接/編碼/字體/渲染問題,我猜測後面會出現 符號。嘗試
SELECT LENGTH(LEFT(T1.Name, 1)) AS charLength
Length返回一個字符串多少字節佔用,所以如果此查詢爲您提供的2個或更多的任何結果,這意味着LEFT()
確實返回多字節字符和你的問題在於無法查詢本身。
如果你在命令行中執行查詢,也許你的終端無法呈現的人物,否則,他們越來越錯位別的地方。如果您使用的是腳本語言,請嘗試使用該語言的字符串長度和ord()
函數,以幫助瞭解發生了什麼。
編輯:由於您使用的是PHP,試試這個:
//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';
舉例來說,如果結果是this character那麼你應該得到 「0xC4 0x9E」。如果你確實得到這種東西,那麼PHP正確獲取多字節字符,而問題是無論是在網頁本身的編碼(見this W3C page)或瀏覽器/字體無法呈現特定的字符。
不幸的是,它沒有工作:( – turezky 2009-04-14 07:51:38
你發出的選擇與什麼?命令行客戶端通常對於多字節表現不佳,因爲它取決於底層終端。嘗試MySQL查詢瀏覽器或類似的東西。 – 2009-04-14 07:55:09