首页 » SEO优化 » phpmysqlsetnames技巧_JSqlparser适配tdsqlmysql中文排序CONVERT

phpmysqlsetnames技巧_JSqlparser适配tdsqlmysql中文排序CONVERT

访客 2024-11-21 0

扫一扫用手机浏览

文章目录 [+]

方法一: 修正相应列的字符集为 GBK 或 其它中笔墨符集。

方法二:利用MySQL内置函数,字符编码是 utf8_general_ci,`ORDER BY CONVERT(表别名.字段名 USING gbk) COLLATE gbk_chinese_ci ASC;`

phpmysqlsetnames技巧_JSqlparser适配tdsqlmysql中文排序CONVERT

方法三:表中增加一列,将中文变成拼音存放下来,排序以新增这一列为基准。

phpmysqlsetnames技巧_JSqlparser适配tdsqlmysql中文排序CONVERT
(图片来自网络侵删)

由于不少系统采取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;

}

}

修正完后再运行,就会创造不报错了。

相关文章

QQ聊天恶搞代码技术背后的趣味与风险

人们的生活越来越离不开社交软件。在我国,QQ作为一款历史悠久、用户众多的社交平台,深受广大网民喜爱。在QQ聊天的过程中,恶搞代码的...

SEO优化 2025-03-02 阅读1 评论0

Python代码截屏技术与应用的完美融合

计算机屏幕截图已经成为人们日常生活中不可或缺的一部分。无论是分享工作成果、记录游戏瞬间,还是保存网页信息,屏幕截图都发挥着重要作用...

SEO优化 2025-03-02 阅读1 评论0

QQ无限刷礼物代码技术突破还是道德沦丧

社交平台逐渐成为人们生活中不可或缺的一部分。QQ作为我国最具影响力的社交软件之一,其丰富的功能吸引了大量用户。近期有关QQ无限刷礼...

SEO优化 2025-03-02 阅读1 评论0