gpt4 book ai didi

php - 对于相同的值,Mysql 字符串检查 equals 是 false

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:31 26 4
gpt4 key购买 nike

MySql 有问题我有一张表格,其中包含来自网站的解析信息。出现奇怪的字符串解释:

查询

select id, address from pagesjaunes_test where address = substr(address,1,length(address)-1)

返回一组值而不是一个值

一开始我执行的功能是:

address = replace(address, '\n', '')
address = replace(address, '\t', '')
address = replace(address, '\r', '')
address = replace(address, '\r\n', '')
address = trim(address)

但问题依然存在。

“地址”字段的值有一些法语字符,但查询返回的值也只包含字母数字英语字符。

另一个测试:我试图检查字符串的长度...... PHP 的 strlen() 和 MYSQL 的 LENGTH() 显示不同的结果!某处差异为 2 个字符,某处差异为 1 个字符,没有特定的“规则”。

我看不到任何空格或制表符或其他内容。

在我手动修改地址后(我删除了所有字符串并重新写入),问题解决了,但是我有 ~ 6000 个值,所以这不是解决方案:)

可能是什么问题?

我想字符串可以有一些东西作为“空字符”,但是如何检测和删除它呢?

谢谢

附言问题不仅仅是长度。我需要将这个表与另一个表连接起来,并使用一个条件来检查“地址”字段中的值是否相等。即使字段具有相同的排序规则并且表具有相同的排序规则,查询也会返回没有匹配的地址

例如

查询:

SELECT p.address,char_length(p.address) , r.address, char_length(r.address) 
FROM `pagesjaunes_test` p
LEFT JOIN restaurants r on p.name=r.name
WHERE
p.postal_code=r.postal_code
and p.address!=r.address
and p.phone=''
and p.cuisines=''
LIMIT 10

所以:p.address!=r.address

结果是:

+-------------------------------------+------------------------+--------------------------+------------------------+| address                             | char_length(p.address) | address                  | char_length(r.address) |+-------------------------------------+------------------------+--------------------------+------------------------+| Dupin Marc13 quai Grands Augustins  |                     34 | 13 quai Grands Augustins |                     24 || 39 r Montpensier                    |                     16 | 39 r Montpensier         |                     16 || 8 r Lord Byron                      |                     14 | 3 r Balzac               |                     10 || 162 r Vaugirard                     |                     15 | 162 r Vaugirard          |                     15 || 32 r Goutte d'Or                    |                     16 | 32 r Goutte d'Or         |                     16 || 2 r Casimir Périer                  |                     18 | 2 r Casimir Périer       |                     18 || 20 r Saussier Leroy                 |                     19 | 20 r Saussier Leroy      |                     19 || Senes Douglas22 r Greneta           |                     25 | 22 r Greneta             |                     12 || Ngov Ly Mey44 r Tolbiac             |                     23 | 44 r Tolbiac             |                     12 || 33 r N-D de Nazareth                |                     20 | 33 r N-D de Nazareth     |                     20 |+-------------------------------------+------------------------+--------------------------+------------------------+

如您所见,“162 r Vaugirard”、“20 r Saussier Leroy”仅包含 ASCII 字符,长度相同但不相等!

最佳答案

也许可以看看 mysql 文本字段的编码 - UTF8 用 2 个字节编码它的大部分字符 - 只有 UTF8 的一小部分(例如 ASCII 字符)用一个字节编码。

MySQL 知道 UTF8 并且计数正确。PHP 文本函数不支持 UTF8 并自行计算字节数。

因此,如果 PHP 比 MYSQL 更重要,这可能是原因,您可以查看 utf8decode。

br 来自萨尔茨堡!

关于php - 对于相同的值,Mysql 字符串检查 equals 是 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10137113/

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