gpt4 book ai didi

mysql char_length 返回不正确的结果

转载 作者:行者123 更新时间:2023-11-29 06:44:21 24 4
gpt4 key购买 nike

我有一个问题:

 select number,char_length(number) from all_numbers where char_length(number)!=10 and number='7034420082';

结果是:

 +-------------+---------------------+
| number | char_length(number) |
+-------------+---------------------+
| 7034420082 | 11 |
+-------------+---------------------+

这怎么可能?数字显然是10个字符。我已经确认数字两边没有空格。

 mysql> explain all_numbers;
+--------------------+-------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+------------+-------+
| number | varchar(16) | NO | PRI | | |.....

最佳答案

问题是 OP 的字符串附加了一个空格。

SELECT 'foo bar' = 'foo bar ' 在 MySQL 中忽略尾随空格,这就是它仍然出现在 OPs 结果中的原因。

您可以使用 SELECT HEX(column) 检查空白间距,在 OP 的情况下给出“3730333434323030383220”。每个字符都被转换为两个字节(字符的 ASCII 值的十六进制表示,即 0-255),如果我们查看末尾,我们可以看到一个 20,它等于到十进制的“32”,又名。 a space character .

解决方案(按照“最有意义”的顺序):

  • 将数据类型更改为 BIGINT(与 16 字节相比,它也只需要 8 字节)。 UNSIGNED 在这里效果最好,支持的电话号码最大为 18446744073709551615
  • 删除空格:UPDATE table SET number = TRIM(number)
  • 同时使用 RTRIM:SELECT CHAR_LENGTH(RTRIM(number))
  • 在 PHP 中使用 strlen(trim())

关于mysql char_length 返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19592291/

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