MySQL VARCHAR奇怪的列行为

时间:2010-05-11 15:19:22

标签: mysql varchar

我有以下SQL语句,它按预期返回单个记录:

select * from geodatasource_cities C,
geodatasource_countries D
where C.CC_FIPS = D.CC_FIPS
and D.CC_ISO='AU'
and UCASE(TRIM(C.FULL_NAME_ND)) LIKE '%JAN JUE%';

但是,如果我使用以下SQL语句,则不返回任何记录。我只将LIKE子句更改为等于子句:

select * from geodatasource_cities C,
geodatasource_countries D
where C.CC_FIPS = D.CC_FIPS
and D.CC_ISO='AU'
and UCASE(TRIM(C.FULL_NAME_ND)) = 'JAN JUE';

有人可以帮助我理解为什么会这样吗?

同样,使用以下声明:

select LENGTH(COUNTRY_NAME),
LENGTH('Australia'),
COUNTRY_NAME
from countries
WHERE UCASE(TRIM(COUNTRY_NAME)) LIKE '%AUSTRALIA%'

它返回:

10 | 9 |澳大利亚

编辑

以下是我用于导入数据的SQL示例:

load data local infile 'CITIES.TXT'
into table geodatasource_cities
fields terminated by '\t'
lines terminated by '\n'
(CC_FIPS,FULL_NAME_ND);

似乎\ n正在对我的数据造成严重破坏。我明天会尝试用其他选项导入。

1 个答案:

答案 0 :(得分:1)

在第二种情况下,您需要在数据库中进行完全匹配,而在第一种情况下,名称必须包含字符串“JAN JUE”。数据库中的全名是“JAN JUE”吗?您可能还需要检查外壳。我知道对于MS-SQL,您可以指定首选的套管处理方法进行比较。一个选择可能区分大小写,而另一个选择不区分。

关于MySql中like子句的注释: http://www.mysqltutorial.org/sql-like-mysql.aspx

修改

MySql Trim()仅删除空格。所以你可以有一个换行符。 (它也可能是非破坏空间,您可能需要测试以查看修剪是否也删除了那些,无法找到明确的答案。)因为您在另外一个字段上得到不同的长度,我建议检查确保您的数据没有这样的尾随隐藏字符。

在此Stack Overflow问题中讨论了这个问题:Does the MySQL TRIM function not trim line breaks or carriage returns?