Although I’ve been developing websites with MySQL for over 7 years now, until recently I had almost always used phpMyAdmin to manage my databases. phpMyAdmin is such an excellent web application and makes managing MySQL so easy that the only time I strayed was when it wasn’t available on the host server (which was very rare). When I needed a desktop MySQL client, I had turned to YourSQL, which I determined a couple of years ago was the best for me when connecting to MySQL from Mac OS X.
Update 10/24/06: In response to reader inquiries, I downloaded and tried out Navicat, and I’ve now added results for that test to the article.
For various reasons that I won’t bore readers with here, I found myself needing a Mac desktop client for MySQL again recently, so I took the opportunity to review the market once again. What surprised me most, I suppose, is how many options there are for Mac OS X users who do a little light database work. (Caveat: I am by no means a database administrator, and my knowledge of SQL and MySQL is merely sufficient to develop web applications—meaning, I can build tables, relate tables, and build queries for those tables. The tools reviewed here are from this use case alone.) In the course of testing, I tried out ten different database apps:
As might be expected, most of the database management utilities developed by commercial outfits—that is, companies mainly out to make a buck—look like ports of Windows software, and since most of them strive for cross-platform, cross-database compatibility, they tend to be written in Java (at least, the Mac and Linux clients are) with a Cocoa wrapper tacked on. Being ports of Windows GUI’s, they suffer from iconitis, a term that describes some developers’ tendency to build user interfaces from little square icons running horizontally across the top of the application window, preferably in 2 or more rows. Such developers seem to think that the more little squarish icons you have, the better. And that practice has made its way into the Java GUI world as well, unfortunately. One sees it in apps like OpenOffice, which isn’t surprising in that the developers of OpenOffice have taken Microsoft Office’s GUI as their primary design inspiration.
Although I approached the commercial applications with an open mind, genuinely anticipating that I’d discover some marvelous GUI gifts that would make my life as a MySQL developer even easier—or at least, something that would make them worth paying for—I gradually determined that they were the worst of the bunch for my needs. Not only were the user interfaces typically clunky and ugly, they weren’t as usable—either because they made me jump through unnecessary hoops to do basic tasks, or because they didn’t consider as “basic tasks” the use cases that consume my MySQL time. An example of such a basic task is the ability to edit textual information within the GUI. Except for Navicat, all of the commercial applications seemed to expect that you’d edit a paragraph or two (let alone 25 or 30) within a narrow, single-line table row, something I’ve never had to do in phpMyAdmin!
Not that this has crimped my style in managing my databases from Mac OS X. If I were developing with a commercial database product—Oracle, say—the story might be different. But since I’m working with an open-source database, it’s not surprising that some of the best tools for working with that database are themselves open source. And not only that, most of these are developed as native Cocoa applications, thereby endowing them with all the goodness that comes naturally with the Cocoa framework.
To make a long summary short, I identified two open-source apps and one commercial app that are my top choices for managing MySQL from a Mac client. I still like YourSQL, but it’s no longer my first choice—that going to an oldie but goodie, CocoaMySQL, which got considerably better this summer in the latest beta version (0.7b4). Both of these native Cocoa applications are excellent at what they do… but CocoaMySQL gets the nod primarily because it’s faster, offers a nifty console that shows all SQL queries made by both you and the interface, has a more flexible built-in search filter that makes finding specific rows a snap, and has far better export tools.
If you have $100 to budget for managing your MySQL data, you could do just as well with Navicat, a top-notch Mac OS X application (it’s also available for Windows and Linux) that has enough extras—particularly in the high-end database admin department—to make it worth a try. Though not perfect, Navicat is very good at what it does, is much better than any of the other commercial products, and provides a lot of functionality that is missing from the open-source apps (support for views, stored procedures, replication, and scheduling, and a slew of GUI “wizards” for building queries, tables, etc).
Here’s the summary table for this shootout, which will be followed by a brief walk-through each application showing a basic screenshot (click on the thumbnails to see a larger, full-window screenshot) and a few notes. The summary ratings here for “Power,” “Range,” and “Target” reflect my scores in trying out the following functions for each application:
- Setup
- Querying data
- Browsing data
- Adding/Modifying data
- Modifying text
- Modifying table structure
- Adding tables
- Importing/Exporting data
The scores for “Cool”, “Looks”, and “Idiots” correspond to my ratings for each application’s Innovativeness, Interface design, and Ease of use.
Name | Version | Price | Cool | Looks | Idiots | Power | Range | Target | Yes? |
Aqua Data Studio | 4.7.2 | Free $149 |
No | ||||||
CocoaMySQL | 0.7b4 | Free Open |
Yes | ||||||
DBVisualizer | 5.1 | Free $129 |
No | ||||||
iSQL | 2.1.8 | Free Open |
No | ||||||
MySQL Query Browser | 1.2.4b | Free Open |
No | ||||||
PGnJ | 0.6 | Free | No | ||||||
RazorSQL | 3.5 | $50 | No | ||||||
SQLGrinder | 2.0.3 | $59 | No | ||||||
YourSQL | 1.8.0e | Free Open |
Yes | ||||||
Navicat | 6.3.2 | $99 | Yes |
Aqua Data Studio
The best that can be said for Aqua Data Studio is that it was easy to set up my database connection. After that, pretty much everything else was way harder than it should be, or too hard period. To make matters worse, it’s got a simply awful user interface with one of the worst cases of iconitis of the bunch. As I wrote in my notes, “Yuck. Millions of little windows icons.”
Now, don’t get me wrong. Icons have their place… after all, the Mac GUI (and its ancestors at Xerox Park) was built on their use. But do you know that none of these little square fellows has a tooltip? That leaves me guessing what the heck they do. Is this any way to build a user interface?
One of the enduring mysteries about this application is its name… What the heck is “Aqua” about it? Certainly not the interface! (Actually, I think the company name is “Aqua” something or other…)
CocoaMySQL
I recall trying CocoaMySQL a couple of years ago, and being unimpressed. I can’t remember why now, but that’s certainly no longer the case. CocoaMySQL is my new best friend when working with MySQL databases. It’s even friendlier than phpMyAdmin… so much so that I’m afraid I’ll have a little trouble going back. My only gripe is that it’s not a beautiful application… Not ugly, mind you, but just nothing at all special to look at. The toolbar icons are particularly plain-jane, though not as uninteresting as the application icon.
Clearly, I’m not in love with CocoaMySQL for its looks. Instead, I love it for its amazing speed: As Steve Jobs would say, I just select my database connection and “Boom!” I’m there. Besides speed, I love its breadth of talent in the import-export business. CocoaMySQL can import delimited ASCII files or SQL scripts, and it can export those formats as well as XML—a strategically important format to have your data in these days. The interface makes exporting query result sets as easy as exporting several tables or the whole shebang.
A lot of the time, I’m opening a database to enter some text record or edit one. So I really appreciate CocoaMySQL’s attention to this little requirement. When you open up a table in this software, you enter a tabbed interface starting with the table structure. Click the next tab, and CocoaMySQL will display the table’s data for browsing. If you doubleclick on a text field, it’ll open the text up in a separate sheet for editing. Sweet! That sheet, by the way, can also handle any blob-type data, including images.
When in browse mode, CocoaMySQL has the handiest search filter at the top of the window. With it, you can quickly enter a search on any of the table’s fields and see the results instantly display below. I simply haven’t had anything that works as well as this for managing my data, and I’m gonna love using it now that I do!
The last reason CocoaMySQL is now my favorite is that it provides an optional console that slides out in a bottom drawer. When it’s open, you can peruse all the queries that get sent to the server with each click you make on the user interface. This is a great way to learn SQL, among other things. But you can also easily reuse the queries… In fact, CocoaMySQL has a handy query library where you can save and recall commonly used queries. This is a great feature that shows up in several of these database tools.
DBVisualizer
DBVisualizer is available in a free version for personal, noncommercial use, but also has an upgraded “Personal” license for $129. It’s a distinction I won’t be investigating, because this is one of the worst applications in the group. It’s a java-based interface created by developers who obviously neither know nor care about how to build software for Mac OS X. Although it looks promising at first glance, don’t let that fool you. Sneeze on DBVisualizer, and its many windows will shrivel up like flimsy slips of paper.
This is one of only two apps in this group that was so difficult to set up that I gave up. I had a hint this wasn’t going to “just work” when I found I had to download a MySQL jdbc driver in order to get the thing going. Even doing that, however, didn’t satisfy. DBVisualizer simply refused to accept the driver, and eventually I had enough of trying.
DBVisualizer isn’t the ugliest application here, but it’s certainly one of the least friendly. (Although I couldn’t get it going, I gave DBVisualizer the benefit of the doubt when it came to rating its Power and Range.)
iSQL Viewer
I downloaded iSQL Viewer only because the developer for YourSQL cited it as a source… iSQL is an open source project that appears to have ceased work a few years ago, but you can still download their cross-platform viewer software.. If you’re as impatient as me, though, I’d advise you to not bother.
Like DBVisualizer, iSQL was impossible to set up in any normal way, and I wasn’t willing to spend the afternoon figuring out why. In my notes, I wrote that iSQL couldn’t seem to tell me whether the mySQL driver was installed or not, and entering the information I had about the remote service (server name, username, password, database name) wasn’t sufficient. iSQL didn’t know what to do with that information.
Also like DBVisualizer, iSQL has a pleasant-looking interface. If I had been able to figure out the secret code to gain entrance to its inner workings, we might have been friends. But alas, it was not to be.
MySQL Query Browser
This is the tool being developed by the MySQL team itself. On looks alone, I’d rate MySQL Query Browser the tops in this class, and it’s not a bad application all around. This is the only one of the bunch that implements tabs, thus enabling easy management of multiple sessions within a single window. It also has browser-like back/forward buttons for navigating back through your query sessions. It’s a very likeable application that’s easy to set up and intuitive for most functions.
As you might expect, this software excels in providing tools to delve into the deep mysteries of MySQL. You’ve got a handy MySQL reference book embedded, as well as excellent query-building tools. MySQL Query Browser also is among the best here at importing and exporting data. Not only can you do CSV, SQL, and XML, but you can also export to HTML and plist formats. Like CocoaMySQL, it’s easy to export result sets or whole groups of tables.
So… what’s not to like? Well, for one thing, it’s kind of pokey. CocoaMySQL would have my data up and out the door before the MySQL software started thinking seriously about fetching it. A show-stopper for me was that it provides no way to edit textual data (or blob data). And though you can browse the data, you have to take an extra step to do so… unlike the other open-source Cocoa tools here, which just show the data when you’d expect without any effort on your part. Finally, although the interface is pretty, it’s very easy to mess up. The panes have little icons at the top of the scrollbar gutters, which do some sort of split routine. Unfortunately, there are no tooltips to explain what they’re splitting or why. All I know is that every time I tried, my data would disappear and I couldn’t get it back without starting all over. I’m sure I was just being stupid, but then good software needs to take stupid users into account.
Navicat
As I mentioned in one of the comments to a reader who inquired about Navicat, I’m not sure why I left this fine software out of the running. Temporary brain freeze, I suspect. I had downloaded Navicat to try out some months back, but it didn’t get written down where I’d remember.
In any case, I’m glad someone asked, and I was happy to try Navicat out finally. I’m still not sure whether I’ll shell out $100 for it, but I’ll definitely try out some of its more advanced features—such as support for views, stored procedures, scheduling, and replication—and maybe learn to need something that I don’t yet know I need. For the basics, Navicat is right up there with YourSQL and CocoaMySQL. Like them, it can easily enable editing of textual or blob fields, and it has excellent import/export tools. Browsing data, adding data, editing and adding tables are all tasks that are easy to accomplish in an interface that’s easy to understand. (I haven’t done scientific speed tests to confirm this, but I would swear that CocoaMySQL is faster than Navicat when it comes to loading tables and data… but the difference isn’t great.)
The open source tools do have a trick or two that Navicat could benefit from. The main one is an embedded search field. I know you’re supposed to query the database using SQL. But hey, if the software can form the query for me and let me just enter my search term, that’s an advance for usability. Why make me enter “select * from categories where category_name like ‘%mac%’” when I could just type “mac” into a search field while selecting the categories table?
Likewise, I couldn’t find any way to easily dump some SQL for a selection of tables or rows. You can dump SQL for the whole database or for individual tables, but it’s not at all obvious how to export a result set as a SQL script. Navicat has great support for import and export in XML, CSV, TXT, and DBF formats, however.
The last point I noted about Navicat is that its user interface is pretty clunky. Like a lot of Windows software, it relies on popping up new windows for just about everything you want to do. Meanwhile, Navicat lets its main window go to waste, hardly using it for anything at all except listing your tables and other library items. By contrast, YourSQL and CocoaSQL use the third pane for loading whatever task you’re working on, and that’s where you can load, browse, and change data, etc. Navicat has a lot of functions to offer, and if you opened a new window for several of them at once, you’d have a lot of very-similar-looking windows to manage. In this case, use of tabs in the main window would be really helpful.
One missed opportunity for the main window, which also leads to some confusion on this newcomer’s part, is the way the toolbar buttons work. Each button first loads a set of subordinate buttons on the “lower” toolbar, and each of these opens a new window when clicked (except for the “Delete” buttons). The weird part is what happens when you first click a main toolbar icon–for example, “Query”. Unless you notice the change in the lower-level buttons, it appears at first that nothing has occurred. This is because the right-hand pane of the main window—which is where you probably expect something to happen—merely gets washed clean, totally blank. Seems like it would make some sense to use this pane for something at this point, both as a clue to users that something has happened and as a way of saving them a click. For example, if your interface wasn’t so heavily reliant on separate windows, you could load one of the functions for “Query”—for example, the query builder—into that pane by default. Just a thought…
PGnJ
PGnJ is a pleasant-looking Cocoa client for MySQL that is a promising start, but not yet fully cooked. There are some nice touches—browsing data is just a double-click on a table name, and you’ve got HTML export as well as export to XML and CSV—but there are too many missing pieces for production use. For example, there’s nothing within the interface that lets you execute queries… you have to invoke a function in one of the application menus for that. Similarly, I saw no way to add tables other than cooking up a SQL query from scratch. And of course, you can’t edit textual data unless you want to crawl around inside a single-line spreadsheet cell all day. If the developer continues work on it, PGnJ might evolve nicely from here. It already has a lot of speed, and it handles PostgreSQL databases in addition to MySQL.
RazorSQL
RazorSQL is another member of the iconitis club, which put me off from the get-go. Like some others here, it also pissed me off by making me download and install a MySQL jdbc driver. At least that step resulted in a working setup (unlike some others), but it still put me in a foul mood. Just when I was getting over that, I realized that by default, RazorSQL was going to maximize every one of its windows every single time, in order to consume my entire monitor real estate. Hmm… and here I thought that kind of GUI behavior had been made illegal here, just as it was on Mars several years ago.
Once I settled down, I determined that browsing RazorSQL was easy, and the interface in general was pretty intuitive. Adding rows to tables initially looked interesting: RazorSQL doesn’t immediately add your data, but rather generates some SQL that you execute to add your data. This would be kind of interesting except that you can’t edit the generated SQL! As I wrote in my notes, this is a problem when the generated SQL generates SQL errors… you have to go back and generate the SQL again rather than just fixing it by hand. Furthermore, I could find no way to get around having to escape apostrophes in entering textual data. Unless I did so, RazorSQL would throw each query back at me and scream bloody murder.
No, thanks. Next!
SQLGrinder
Of the commercial products in this list, SQLGrinder came closest to tempting me. If it were able to handle textual data-editing in the manner of YourSQL and CocoaMySQL, I wouldn’t be simply tossing it out of consideration. Its other main weakness is relatively poor export functions: I could only export to CSV without using SQL, which means it doesn’t even do table dumps from within the GUI. At first, I didn’t think it was possible to export result sets, but then I tried copying and pasting from SQLGrinder to a text editor and spreadsheet application… it does, in fact, paste CSV format in this manner.
Still, SQLGrinder has a very nice, intuitive interface, and it provides a handy search form which makes free-form querying a snap. The layout of its interface is similar to YourSQL, which I also like a lot.
One other fairly serious weakness I noted was an inability to add table rows without writing and executing a SQL query. Given the ease with which other (free) apps here handle this functionality, why would I bother doing this? I’m sure SQLGrinder has a lot of advanced functionality that would appeal to database admins, especially if you have to manage more than just MySQL. But that ain’t me, and I’ve got nothing to gain by spending $59 on SQLGrinder. (Lovely application icon, though!)
YourSQL
All those things I said about CocoaSQL…? Most of them go for YourSQL as well. As I mentioned at the beginning of the article, this was my favorite tool going into the shootout, and it ends up in second place.
So, does it top CocoaMySQL in any way? Well, it’s a little prettier and has a nicer icon. I also like its search filter a little better, although it’s not as flexible. What I like is that it searches on all fields at once, whereas CocoaMySQL does only one at a time. It’s also integrated into the interface in a much more Mac-like way that’s just obvious and easy to use.
So, why isn’t it still Number One? YourSQL is quite a bit pokier than CocoaMySQL, and it crashes occasionally when trying to do too much. When it doesn’t crash, you get the spinning beach ball for too long. Besides that, YourSQL only exports to SQL and CSV… and I think I’m going to find XML export a real bonus here soon. Furthermore, it has no handy way of exporting result sets, unlike CocoaMySQL. Finally, although YourSQL has the text-editing requirement down, it takes an extra click to get there. Not a biggie, but as they say, “Every little click counts!”