It depends on the project. The worst approach, IMO, is deciding what your style will be without taking what kind of project it is into account. For smaller projects, or small teams of developers who are all good in the various languages used, it might be that separating things adds more complexity then is necessary.
Personally, I find separation on functionality far more important than separation on language. It shouldn't be needed to reshuffle files around if you rewrite part of your program in C. I do agree though that there shouldn't be SQL mixed with Perl (C, Java, Python, whatever). All SQL code should live in the database - and all the code is allowed to do is to call stored procedures. And the code calling the stored procedures should be in a layer itself as well. Hence, I wouldn't use MySQL, as that doesn't have stored procedures. (Or triggers. Or subselects.)