How do I use the POSIX character classes upper and lower to search text in MySQL?
From the article on mysql REGEXP:


  REGEXP is not case sensitive, except when used with binary strings.


A simple solution would be to use the BINARY operator:

SELECT * FROM article_body WHERE body_text REGEXP BINARY "FREE";


As to why your example doesn't work, the way I interpret it is "Any string with one or more uppercase letter followed by FREE", but of course FREE is case-insensitive there.