3

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

两个显示一些基本的数据结构,表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

结果只是缟玛瑙赭石值。什么时候应该返回更多的数据。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
'
4

1 回答 1

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);
    
于 2013-01-03T17:30:43.410 回答