我有一个谷歌应用程序脚本,如下所示:
// Initialize DB variables
var address = 'my-address'
var user = 'my-user-name'
var password = 'my-password'
var db = 'my-db'
var dbUrl = 'jdbc:mysql://' + address + '/' + db
function testUtf8() {
// Generate an SQL query
var conn = Jdbc.getConnection(dbUrl, user, password)
var stmt = conn.createStatement();
var results = stmt.executeQuery('SELECT * FROM my_table WHERE col_name=\'中文\';')
// Display query result
var colCount = results.getMetaData().getColumnCount()
while (results.next()) {
var colCount = results.getMetaData().getColumnCount() // No result is retured even though there is a value of `中文` in col_name.
for (var col = 0; col < colCount; col++) {
Logger.log(results.getString(col + 1))
}
}
// Clean up
stmt.close();
conn.close();
}
即使表中中文
的值为col_name
,SQL查询也无法找到数据。
当我将查询从SELECT * FROM my_table WHERE col_name='中文';
更改为SELECT * FROM my_table WHERE col_name='abc';
时,它会成功返回数据。
所以这一定是编码问题。
如何成功执行包含中文字符的SQL查询?
答案 0 :(得分:0)
更改
var dbUrl = 'jdbc:mysql://' + address + '/' + db
至var dbUrl = 'jdbc:mysql://' + address + '/' + db
到
var dbUrl = 'jdbc:mysql://' + address + '/' + db + '?useUnicode=true&characterEncoding=UTF-8'
解决了这个问题。
告诉jdbc使用utf-8编码。