此mySQL更新查询未生成更改的行。为什么?

此mySQL更新查询未生成更改的行。为什么?,sql,mysql,Sql,Mysql,今天早上我不知所措。也许我的咖啡被麻醉了?简单问题-将现有ID放入此临时表以进行导出 类似这样的表格: 餐桌上的人 +--------+-----------------------+ | id | email | +--------+-----------------------+ | 142755 | xxxxxxx@xxxxxxxxx.com | +--------+-----------------------+ 表no\u dma +-----

今天早上我不知所措。也许我的咖啡被麻醉了?简单问题-将现有ID放入此临时表以进行导出

类似这样的表格:

餐桌上的人

+--------+-----------------------+
| id     | email                 |
+--------+-----------------------+
| 142755 | xxxxxxx@xxxxxxxxx.com |
+--------+-----------------------+
表no\u dma

+--------+------------------------+
| person | email                  |
+--------+------------------------+
|     0  | xxxxxxx@xxxxxxxxx.com  |
+--------+------------------------+
查询:

UPDATE 
person, no_dma
SET no_dma.person = person.id
WHERE person.email = no_dma.email;
我已经验证了两个表中至少存在一些匹配的电子邮件地址,但更新会产生

Query OK, 0 rows affected (9.31 sec)
Rows matched: 0  Changed: 0  Warnings: 0
很明显,我今天有点小菜一碟

帮帮我?我做错了什么

//编辑

根据下面的评论,我提出了以下问题:

mysql> select person, email from no_dma limit 0,1;
+--------+------------------------+
| person | email                  |
+--------+------------------------+
 |     0 | tom_r1989@xxxxxxx.com
+--------+------------------------+
1 row in set (0.00 sec)

mysql> select email from no_dma where email = 'tom_r1989@xxxxxxx.com';
Empty set (0.00 sec)

mysql> select email from no_dma where TRIM(email) = 'tom_r1989@xxxxxxx.com';
Empty set (0.46 sec)
这两个表都将电子邮件字段存储为varchar,排序规则设置为latin1_swedish_ci

这个问题是什么

mysql> SELECT CONCAT('"',email,'"') from no_dma limit 0,3;
+-----------------------+
| CONCAT('"',email,'"') |
+-----------------------+
"  |amjor308@xxx.com
"   |utt@xxx.com
"  |00000000@xxx.com
+-----------------------+


mysql> SELECT email from no_dma limit 0,3;
+--------------------+
| email              |
+--------------------+
 |+amjor308@xxx.com
  |mutt@xxx.com
 |000000000@xxx.com
+--------------------+
那里发生了什么事?看起来像是新线,但我以为TRIM会处理这些

mysql> SELECT TRIM(email) from no_dma limit 0,3;
+--------------------+
| TRIM(email)        |
+--------------------+
 |+amjor308@aol.com
  |mutt@excite.com
 |000000000@aol.com
+--------------------+
3 rows in set (0.00 sec)
更新:发现问题 导入是在Windows生成的CSV上完成的,但mysqlimport被赋予了arg

-以“=”结尾的行\n

重新导入的数据工作正常。
很抱歉浪费了大家的时间。

表no\u dma有尾随空格。数据不一样

编辑:

设置ANSI_填充? 它真的是一个空格吗 每个值的散列或校验和显示了什么? 绳子的长度是多少?
表no_dma有一个尾随空格。数据不一样

编辑:

设置ANSI_填充? 它真的是一个空格吗 每个值的散列或校验和显示了什么? 绳子的长度是多少?
我认为这句话很好。B/c我对它进行了测试,它成功了。

我认为这句话很好。B/c我对它进行了测试,它成功了。

你是如何验证的?当您运行SELECT person.id FROM person,no_dma WHERE person.email=no_dma.email时,是否会收到行?我想我在您的示例中看到no_dma.email结尾有一个额外的空格,请尝试从no_dma中选择CONCAT“”、email“”,以查看是否是这种情况。不相关,但您可能希望查找插入到。。。在重复密钥更新时。。。如果要一次性将所有数据导出到另一个表并更新现有行,您是如何验证的?当您运行SELECT person.id FROM person,no_dma WHERE person.email=no_dma.email时,是否会收到行?我想我在您的示例中看到no_dma.email结尾有一个额外的空格,请尝试从no_dma中选择CONCAT“”、email“”,以查看是否是这种情况。不相关,但您可能希望查找插入到。。。在重复密钥更新时。。。如果要一次性将所有数据导出到另一个表,并更新已有的行。是否使用尾随空间?我有点困惑。。。通常我会认为你疯了,但考虑到你的徽章,我不同意。。。我不明白it@Raffael1984:这是两者的区别my@email.com和my@email.com.不是真的。。。sql语句解析器通常忽略空格。您的示例仅适用于比较stringstrailing空间?我有点困惑。。。通常我会认为你疯了,但考虑到你的徽章,我不同意。。。我不明白it@Raffael1984:这是两者的区别my@email.com和my@email.com.不是真的。。。sql语句解析器通常忽略空格。您的示例仅适用于比较字符串