方法一: 修正相应列的字符集为 GBK 或 其它中笔墨符集。
方法二:利用MySQL内置函数,字符编码是 utf8_general_ci,`ORDER BY CONVERT(表别名.字段名 USING gbk) COLLATE gbk_chinese_ci ASC;`
方法三:表中增加一列,将中文变成拼音存放下来,排序以新增这一列为基准。

由于不少系统采取JSqlparser来作为SQL语法解析的工具。采取方法二会报错,详细缺点信息如下:
net.sf.jsqlparser.JSQLParserException: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "(" "("。。。
导致上述非常是由于CONVERT(表别名.字段名 USING gbk)不是标准的SQL函数,JSqlParser标准库目前不支持。通过去github上查看,其commiter也说了今后也不支持:
github社区截图
为了能让jsqlparser支持convert函数,须要对JAVACC做特定适配,由于涉及到编译事理等比较深的知识,我就直接贴源码:
NamedExpressionList NamedExpressionList1():
{
NamedExpressionList retval = new NamedExpressionList();
List<Expression> expressions = new ArrayList<Expression>();
List<String> names = new ArrayList<String>();
Expression expr1 = null;
Expression expr2 = null;
String name = "";
Token tk1 = null;
Token tk2 = null;
}
{
(
(tk1=<K_BOTH>|tk1=<K_LEADING>|tk1=<K_TRAILING>) { names.add(tk1.image); }
expr1=SimpleExpression()
(tk2=<K_FROM>|tk2=<K_IN>|tk2=<K_PLACING>|tk2 = "USING")
expr2=SimpleExpression()
{ expressions.add(expr1); names.add(tk2.image); expressions.add(expr2);}
)
{
retval.setNames(names);
retval.setExpressions(expressions);
return retval;
}
}
修正完后再运行,就会创造不报错了。