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