2014-11-03 4 views
0

나는 하나의 열이 데이터 형식 varchar 인 테이블을 가지고 있습니다. 여기에 일부 값은 다음과 같습니다MySQL은 Varchars를 절대 값으로 취급합니까?

-.001 
-.010 
-7.13 

내가 내림차순 정렬, 그것이 나에게주는이 :이 거꾸로이지만,

-7.13 
-.010 
-.01 

당신이 숫자의 절대 값을 가질 경우 올바른. 마찬가지로이 숫자의 최대 값에 대한 쿼리를 실행하면 -7.13이됩니다.

그게 MySQL이 varchar에서하는 것입니까?

(PS I 때로는 몇 가지 재미있는 설정이 맥에 속편 프로를 사용하고 있습니다. 그 이유가 될 수 있을까요?)

답변

2

번으로 VARCHAR는 알파벳 순서로 정렬됩니다 (단일 문자)하는 대응 것 ASCII 인코딩. ASCII 인코딩 (here 참조)에서 마침표는 0보다 작은 "46"이며 "48"입니다.

즉, 귀하의 값은 문자의 순서대로 정렬됩니다.

숫자 정렬을 원할 경우 + 0을 사용하여 숫자에 대한 자동 변환을 수행 할 수 있습니다 ("자동"은 오류를 무시함을 의미). 즉 :

order by col + 0 desc 
+0

감사합니다. 그래서 내가 진술을 할 때, "진실한 진실을 말할 때"-78이 정말 정확한 값을 줄 경우? 아니면 0과 같은 값을 줄 것인가? – japem

+0

MySQL은이 문장을 올바르게 처리합니다. 그것이 당신이 원하는 것을하는지 여부는 당신의 기대에 달려 있습니다. MySQL은 문자열을 숫자가 필요한 컨텍스트의 숫자로 변환합니다. 이 문맥에서 'a'는 이미 숫자가 아닌 경우 숫자로 변환됩니다. –