Bug #20295 Function MID()
Submitted: 6 Jun 2006 14:31 Modified: 6 Jun 2006 14:54
Reporter: FELIPE GONÇALVES Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server Severity:S3 (Non-critical)
Version:4.0.25-standard OS:Windows (Win XP)
Assigned to: CPU Architecture:Any

[6 Jun 2006 14:31] FELIPE GONÇALVES
Description:
I've testing the function MID() using MySQL 5 and Ok!, No problems, but when I'd try to use it at MySQL 4.0.25-standard (installed at the website www.atuasul.com.br) the result was wrong.

I was trying to catch the fifth finish character of a string, using: MID(string, -5, 1)

How to repeat:
SELECT l.id_lancamento, l.titulo, MID(li.path_thumb,4) AS path FROM lancamentos l, lancamentos_imagens li WHERE l.id_lancamento=li.id_lancamento AND MID(li.path_thumb,-5, 1) = 1 GROUP BY l.id_lancamento;
[6 Jun 2006 14:54] Valeriy Kravchuk
Sorry, but it is not a bug (for 4.0.25). Please, read the manual (http://dev.mysql.com/doc/refman/4.1/en/string-functions.html):

"MID(str,pos,len)

MID(str,pos,len) is a synonym for SUBSTRING(str,pos,len). 

...

- SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)

The forms without a len argument return a substring from string str starting at position pos. The forms with a len argument return a substring len characters long from string str, starting at position pos. The forms that use FROM are standard SQL syntax. Beginning with MySQL 4.1.0, it is possible to use a negative value for pos. In this case, the beginning of the substring is pos characters from the end of the string, rather than the beginning."

So, before 4.1 negative value for pos was not supported.