mysql db无法识别有效的连接

时间:2013-01-03 17:01:08

标签: mysql join sqldatatypes

我不太确定这里的问题是什么,我只知道数据库无法正常工作。

两个显示一些基本数据结构,表1看起来像这样

      name         | inGameID
Azure Plagioclase  |  17455
   Plagioclase     |  18
  viscous Pyroxeres|  17460
      Onyx Ochre   |  1232

表2类似于此类

  userName  |    item
     sam    |   Onyx Ochre
    mike    |   viscous Pyroxeres
     dave   |    azure plagioclase

尝试运行此查询时

SELECT fl.item, od.name 
FROM oreData od
JOIN fleetLog fl ON lower(od.name) = lower(fl.item)
order by fl.logID asc

结果只有on玛瑙的值。什么时候应该返回更多的数据。 t1.name和t2.item都具有相同的数据类型。我不确定需要哪些细节来帮助诊断这个问题,但是我更喜欢这个问题。我很乐意提供更多细节。我为这么模糊而道歉,我在

之前从未遇到过这样的问题 你们在头上敲了一下钉子。它是在这些值的前面或末尾的额外空白区域。解决这个问题的最佳方法是什么?

'39';'2';'1';'2001-03-13 00:14:27';'userName';'322';'Vivid Hemorphite
'
'38';'2';'1';'2001-03-13 00:19:28';'userName';'6386';'Azure Plagioclase
'

1 个答案:

答案 0 :(得分:2)

  你们在头上敲了一下钉子。它是在这些值的前面或末尾的额外空白区域。解决这个问题的最佳方法是什么?

  1. 修复您的应用程序代码,以便此类数据不会进入数据库;如果无法做到这一点,您可以在数据库中定义触发器,以便在写入操作期间根据需要去除字符:

    CREATE TRIGGER oreData_ins  BEFORE INSERT ON oreData  FOR EACH ROW
    SET NEW.name = TRIM(NEW.name);
    
    CREATE TRIGGER oreData_upd  BEFORE UPDATE ON oreData  FOR EACH ROW
    SET NEW.name = TRIM(NEW.name);
    
    CREATE TRIGGER fleetLog_ins BEFORE INSERT ON fleetLog FOR EACH ROW
    SET NEW.item = TRIM(NEW.item);
    
    CREATE TRIGGER fleetLog_upd BEFORE UPDATE ON fleetLog FOR EACH ROW
    SET NEW.item = TRIM(NEW.item);
    
  2. 更新现有数据:

    UPDATE oreData  SET name = TRIM(name);
    UPDATE fleetLog SET item = TRIM(item);