package de.brightbyte.wikiword; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class CharsetTest { /** * Command line arguments: * CharsetTest text [dbinfo] [charset] [collate] [setnames] * try charset utf8, collate utf8_bin, setnames utf8 or nothing. * example: jdbc:mysql://localhost/TestDB?user=me&password=xxxx&characterEncoding=utf8 ÄxŁ utf8 utf8_bin */ public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException { //parse args --------------------------------------- String txt = args[1]; String charset = ""; if (args.length>2) { charset = "CHARSET "+args[2]; } String collate = ""; if (args.length>3) { collate = "COLLATE "+args[3]; } String names = ""; if (args.length>4) { names = args[4]; } System.out.println(charset+" "+collate+"; "+names); //connect --------------------------------------- /* File dbf = new File(args[0]); DatabaseConnectionInfo db = new DatabaseConnectionInfo(dbf); Connection conn = db.openConnection(); */ Class.forName("com.mysql.jdbc.Driver"); String url = args[0]; Connection conn = DriverManager.getConnection(url); Statement st = conn.createStatement(); if (names.length()>0) { st.executeUpdate("SET NAMES "+names); } //create table --------------------------------------- //st.executeUpdate("DROP TABLE IF EXISTS CharsetTest"); st.executeUpdate("CREATE TABLE CharsetTest ( id INT AUTO_INCREMENT, s VARCHAR(255) collate utf8_bin, t TEXT collate utf8_bin, x VARBINARY(255), PRIMARY KEY (id) ) "+charset+" "+collate); //insert literal --------------------------------------- st.executeUpdate("INSERT INTO CharsetTest SET s = '"+txt+"', t = '"+txt+"', x = '"+txt+"'"); //insert programmatically --------------------------------------- PreparedStatement pst = conn.prepareStatement("INSERT INTO CharsetTest SET s = ?, t = ?, x = ?"); pst.setString(1, txt); pst.setString(2, txt); pst.setString(3, txt); pst.execute(); pst.setBytes(1, txt.getBytes("UTF-8")); pst.setBytes(2, txt.getBytes("UTF-8")); pst.setBytes(3, txt.getBytes("UTF-8")); pst.execute(); pst.close(); //show result --------------------------------------- ResultSet r = st.executeQuery("SELECT id, s, t, x FROM CharsetTest"); while (r.next()) { System.out.println(r.getString(1)+"\t\t"+r.getString(2)+"\t\t"+r.getString(3)+"\t\t"+r.getString(4)); } //drop table --------------------------------------- st.executeUpdate("DROP TABLE CharsetTest"); //cleanup --------------------------------------- st.close(); conn.close(); } }