开发者

MySQL VARCHAR strange column behavior

开发者 https://www.devze.com 2022-12-30 09:40 出处:网络
I have the following SQL statement which returns a single record as expected: select * from geodatasource_cities C,

I have the following SQL statement which returns a single record as expected:

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%';

However, If I use the following SQL statement, no records are returned. I have only changed the LIKE clause to an equal to clause:

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';

Can anybody please help me understand why this may be happening?

Similarly, with the following statement:

select LENGTH(COUNTRY_NAME),

LENGTH('Australia'),

COUNTRY_NAME

from countries

WHERE UCASE(TRIM(COUNTRY_NAME)) LIKE '%AUSTRALIA%'

It returns:

10 | 9 | Australia

EDIT

Here is a sample of the SQL I used to import the data:

load data local infile 'CITIES.TXT'

into table geodatasource_cities

fields terminated by '\t'

lines terminated by '\n'

(CC_FIPS,FULL_NAME_ND);

It appears as though the \n is wreaking havoc on my data. I will try to import with alternative options tomorrow.


In the second case, your requiring an exact match in the database, while in the first case, the name must contain the string "JAN JUE". Is the full name exactly "JAN JUE" in the database? You may also need to check your casing. I know for MS-SQL you can specify your preferred treatment of casing for comparisons. One selection may be case sensitive while the other is not.

Notes about that for the like clause in MySql: http://www.mysqltutorial.org/sql-like-mysql.aspx

EDIT

The MySql Trim() only removes spaces. So you could have a line break. (It could also be non breaking spaces, you may need to test to see if trim removes those also, can't find a definitive answer on that.) Since your getting a different length on fields of one more, I'd suggest checking to make sure your data doesn't have trailing hidden characters like that.

This problem is talked about in this Stack Overflow Question: Does the MySQL TRIM function not trim line breaks or carriage returns?

0

精彩评论

暂无评论...
验证码 换一张
取 消