MySQL VARCHAR奇怪的列行为

MySQL VARCHAR奇怪的列行为,mysql,varchar,Mysql,Varchar,我有以下SQL语句,它按预期返回一条记录: 从geodatasource_cities C中选择*, 地理数据源国家D 其中C.CC_FIPS=D.CC_FIPS 和D.CC_ISO='AU' 和UCASE(TRIM(C.FULL_NAME_u ND))如“%JAN JUE%”; 但是,如果使用以下SQL语句,则不会返回任何记录。我只是将LIKE条款改为等同条款: 从geodatasource_cities C中选择*, 地理数据源\u国家D 其中C.CC_FIPS=D.CC_FIPS 和

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


从geodatasource_cities C中选择*,
地理数据源国家D
其中C.CC_FIPS=D.CC_FIPS
和D.CC_ISO='AU'
和UCASE(TRIM(C.FULL_NAME_u ND))如“%JAN JUE%”;

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


从geodatasource_cities C中选择*,
地理数据源\u国家D
其中C.CC_FIPS=D.CC_FIPS
和D.CC_ISO='AU'
和UCASE(TRIM(C.FULL_NAME_ND))='JAN JUE';

谁能帮我理解为什么会发生这种事

同样地,以下陈述:


选择长度(国家/地区名称),
长度(“澳大利亚”),
国家/地区名称
来自不同国家
其中UCASE(TRIM(COUNTRY_NAME))如“%AUSTRALIA%”

它返回:

10 | 9 |澳大利亚

编辑

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


加载数据本地填充“CITIES.TXT”
进入表geodatasource\u cities
以“\t”结尾的字段
以“\n”终止的行
(抄送FIPS,全名和)


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

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

MySql中like子句的注意事项:

编辑

MySql Trim()只删除空格。这样你就可以换行了。(它也可能是不间断的空格,您可能需要测试trim是否也删除了这些空格,但找不到明确的答案。)由于您的字段长度不同,我建议检查以确保您的数据没有像这样的尾随隐藏字符


这个问题在堆栈溢出问题中讨论过:

我最初认为这是一个大小写问题,这就是为什么我将字段FULL\u NAME\u ND转换为大写,以便在同一个大小写中进行比较!是的,你是怎么写的,这不应该是个问题。全名的文本只是“Jan Jue”对吗?哦,顺便说一下,“Jan Jue”在数据库中。实际上应该是“Jan Juc”,这就是我在去解决问题时首先发现数据有问题的原因。似乎这可以回答问题,我明天会确认!非常感谢。完全导入了参数不正确的数据,我截断了表并使用以下sql重新导入:将数据本地填充'CITIES.TXT'加载到表CITIES字符集utf8字段中,以'\t'行结尾,以'\r\n'行结尾,忽略1行;全名的类型是什么?它是一个二进制字符串吗?像'JAN-JUE'这样的UCASE(TRIM(C.FULL\u NAME\u ND))匹配吗?是的,像'JAN-JUE'这样的UCASE(TRIM(C.FULL\u NAME\u ND))返回一条记录,无论我在LIKE语句中是否使用%