Mysql 6.0开始对4字节utf8提供支持,全面遵循RFC 3629规范。
见: http://dev.mysql.com/doc/refman/6.0/en/mysql-nutshell.html
很可惜,我没有试验成功,难道还只是"are expected to be added to MySQL 6.0: "?
而且,按目前的mysql开发日志中http://forge.mysql.com/worklog/task.php?id=1213写到
Version: Server-6.0
Status: In-Documentation
Priority: Low
Description:
Pushed to 6.0.4 on Nov 27/2007.
            
估计6.0.4版本该功能正式提供。

从bug trace上看,5.2.6时mysql就已经支持过4byte utf8,utf32 utf16,http://bugs.mysql.com/search.php?search_for=utf32&status%5B%5D=Active&severity=&limit=30&order_by=&cmd=display&phpver=&os=0&os_details=&bug_age=0&tags=&similar=&target=&defect_class=all&workaround_viability=all&impact=all&fix_risk=all&fix_effort=all
不过我不知道如何才能下载到5.2.6? 估计要从配置库下载了自行编译吧。另外,6.0.4alpha的源代码配置库中也已经有了。

==================================
目前版本可以使用一个暂时的解决方法,就是5.1.3 connectors提供的useBlobToStoreUTF8OutsideBMP功能,功能倒是完整,但必须把字段类型设置为blob,性能自然很值得质疑.
String url = "jdbc:mysql://localhost:3306/u?useUnicode=true&characterEncoding=utf8&useBlobToStoreUTF8OutsideBMP=true&utf8OutsideBmpIncludedColumnNamePattern=a";


        connection 
= DriverManager.getConnection(url, username, password);
        Statement stmt 
= connection.createStatement();
        ResultSet rs 
= stmt.executeQuery("select * from t where a like '你%'");
        
while (rs.next()) {
            
// String name = new String(rs.getBytes("a"), "UTF-8");
            String name = rs.getString("a");
            System.out.println(name);
            
        }

        stmt.close();
        connection.close
试过
insert t values(0xF0A38D98);
select hex(a) from t,数据存取均正常。