2011-02-11 137 views
1

今天早上我不知所措。也许我的咖啡被麻醉了?简单的问题 - 将现有的ID导入此临时表中进行导出。不更改行由此mySQL更新查询生成。为什么?

表所示:

表人

+--------+-----------------------+ 
| id  | email     | 
+--------+-----------------------+ 
| 142755 | [email protected] | 
+--------+-----------------------+ 

表no_dma

+--------+------------------------+ 
| person | email     | 
+--------+------------------------+ 
|  0 | [email protected] | 
+--------+------------------------+ 

查询:

UPDATE 
person, no_dma 
SET no_dma.person = person.id 
WHERE person.email = no_dma.email; 

我已经验证了至少一些匹配鄂麦的存在l地址在两个表中,但更新产生

Query OK, 0 rows affected (9.31 sec) 
Rows matched: 0 Changed: 0 Warnings: 0 

很明显,我今天有点d bra。

请帮我吗?我做错了什么?

//编辑

每评论下面我做这些查询:

mysql> select person, email from no_dma limit 0,1; 
+--------+------------------------+ 
| person | email     | 
+--------+------------------------+ 
|  0 | [email protected] 
+--------+------------------------+ 
1 row in set (0.00 sec) 

mysql> select email from no_dma where email = '[email protected]'; 
Empty set (0.00 sec) 

mysql> select email from no_dma where TRIM(email) = '[email protected]'; 
Empty set (0.46 sec) 

两个表具有电子邮件字段存储与整理设置为latin1_swedish_ci VARCHAR。

而这个查询,WTH?

mysql> SELECT CONCAT('"',email,'"') from no_dma limit 0,3; 
+-----------------------+ 
| CONCAT('"',email,'"') | 
+-----------------------+ 
" |[email protected] 
" |[email protected] 
" |[email protected] 
+-----------------------+ 


mysql> SELECT email from no_dma limit 0,3; 
+--------------------+ 
| email    | 
+--------------------+ 
|[email protected] 
    |[email protected] 
|[email protected] 
+--------------------+ 

这是怎么回事?看起来像换行符,但我认为TRIM()处理这些?

mysql> SELECT TRIM(email) from no_dma limit 0,3; 
+--------------------+ 
| TRIM(email)  | 
+--------------------+ 
|[email protected] 
    |[email protected] 
|[email protected] 
+--------------------+ 
3 rows in set (0.00 sec) 

UPDATE:FOUND ISSUE 进口被在Windows完成生成的CSV的mysqlimport但给予精氨酸

--lines封端逐= '\ n'

重新导入数据工作正常。 对不起,浪费了时间。

+0

您是如何验证的?当你运行`SELECT person.id FROM person,no_dma WHERE person.email = no_dma.email`时,你会得到行吗? – 2011-02-11 15:55:42

+1

我想我在你的例子中看到了一个额外的空间,在no_dma.email结尾处,尝试从no_dma`选择CONCAT('“',email,''')来查看是否是这种情况。 – jswolf19 2011-02-11 15:56:15

回答

3

表no_dma有尾随空格。数据不一样。

编辑:

  • SET ANSI_PADDING?
  • 它真的是一个空格: 是ASCII 160
  • 每个值的散列或校验和显示什么?
  • 字符串长度是多少?
1

我认为这句话很好。 B/C我测试了它,它工作。