Created
March 2, 2012 09:52
-
-
Save wshager/1957443 to your computer and use it in GitHub Desktop.
basic test for utf8 chars in mysql-native using execute
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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