gpt4 book ai didi

mysql - 如何选择第一个字符的唯一列表[MySQL]

转载 作者:行者123 更新时间:2023-11-29 04:31:56 26 4
gpt4 key购买 nike

我有一列包含名称列表。我只需要从名称中选择第一个(唯一)字母。对于非 utf-8 字符,以下查询非常有效:

SELECT DISTINCT LEFT(T1.Name, 1) AS firstLetter

但是,当名称以 UTF-8 编码字符开头时,返回:�-sign。我想这只是 UTF-8 字符串的第一个字符。

提前致谢。

问题是如何从上面的列中正确选择完整的第一个字符。

P.S.:表格字符集为utf8,排序规则设置为utf8_bin,字段字符集为utf8,排序规则设置为utf8_turkish_ci。

最佳答案

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),要么浏览器/字体无法呈现该特定字符。

关于mysql - 如何选择第一个字符的唯一列表[MySQL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/746669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com