Skip to content

Instantly share code, notes, and snippets.

@wshager
Created March 2, 2012 09:52
Show Gist options
  • Save wshager/1957443 to your computer and use it in GitHub Desktop.
Save wshager/1957443 to your computer and use it in GitHub Desktop.
basic test for utf8 chars in mysql-native using execute
// adapted from https://github.com/persvr/perstore/blob/master/engines/node/store-engine/sql.js
function MysqlWrapper(params) {
var currentConnection;
return {
executeSql: function(query, args, callback, errback) {
var conn = currentConnection;
if(!conn) {
errback(new Error("No transactional context has been created"));
return;
}
if (!conn.clean) {
errback(new Error("Cannot commit a transaction with an error"));
return;
}
var charset = require("mysql-native/charset").Charset.by_name(conn.get("charset"));
if(charset && charset.name=="utf8") conn.execute("SET NAMES utf8");
var cmd = conn.execute(query,args);
cmd.on('result', function(result) {
if (conn.clean && callback) {
callback({
insertId: result.insert_id,
rowsAffected: result.affected_rows,
rows: result.rows
});
}
});
cmd.on('error', function(err) {
conn.clean = false;
if (errback)
errback(err);
});
},
open: function() {
var conn = connectMysql(params);
currentConnection = conn;
},
close: function() {
currentConnection.close();
currentConnection = null;
}
};
function throwOnError(cmd, action) {
cmd.on('error', function(err) {
throw new Error('Failed to ' + action +
(err && err.message ? ': ' + err.message : ''));
});
}
function connectMysql(params) {
var ret = require("mysql-native/client").createTCPClient(params.host, params.port);
ret.auto_prepare = true;
ret.row_as_hash = true;
ret.clean = true;
if(params.charset) ret.set("charset",params.charset);
throwOnError(ret.connection, 'connect to DB');
throwOnError(ret.auth(params.name, params.user, params.pass), 'authenticate');
return ret;
}
}
var db = MysqlWrapper({
"charset":"utf8_general_ci",
"host": "localhost",
"port": 3306,
"name":"nodetest",
"user":"nodetest",
"pass":"test123"
});
db.open();
db.executeSql("INSERT INTO `test` (`utf8field`) VALUES (?)", ["öÆðζλЩж什麼לק"], function(res){
var lastinserted = res.insertId;
db.executeSql("SELECT `utf8field` FROM `test` WHERE id=?", [lastinserted], function(res){
console.dir(res.rows[0]);
db.close();
}, function(e){
console.log(e);
});
}, function(e){
console.log(e);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment