wlue 发表于 2023-6-1 21:07

求助:Sqlite数据库中文排序问题

本帖最后由 wlue 于 2023-6-1 21:10 编辑

我用 PHP 结合 SQLite 数据库 开发一个小型办公系统(已经完成),但还有一个问题没有解决,那就是 Sqlite不支持 对中文字段的排序,在网上搜了一下,找到两篇文章:
SQLite-如何实现中文按拼音排序:http://www.cftea.com/c/2020/08/12950.asp
Sqlite中文排序:https://www.cnblogs.com/telwanggs/p/6856642.html
但我对 SQLite 了解不深,对这两篇文章看不懂,不知道如何编写排序方法,如何安装排序方法(按照文章中的代码在命令行中比葫芦画瓢老是出错{:1_924:})……
顺便说一下,我对 SQLite 数据库的结构设计,使用的是 Navicat Premium 和SQLiteStudio 可视化工具,对命令行了解不多……
请对SQLite 数据库精通的大神出手帮忙指点迷津,不胜感激{:1_893:}{:1_893:}{:1_893:}

一闪一闪233 发表于 2023-6-1 22:33

本帖最后由 一闪一闪233 于 2023-6-2 01:11 编辑

你用的是php不是c语言,插入的时候多维护个拼音列吧,查的时候按拼音列查

zpy2 发表于 2023-6-2 05:08

本帖最后由 zpy2 于 2023-6-2 05:12 编辑

https://club.excelhome.net/forum ... ile&_dsign=cf55a38d
https://club.excelhome.net/forum.php?mod=viewthread&tid=1647951&fromguid=hot&extra=&mobile&_dsign=e5ea41d9
自定义函数获取拼音,然后排序

boxer 发表于 2023-6-2 07:26

一闪一闪233 发表于 2023-6-1 22:33
你用的是php不是c语言,插入的时候多维护个拼音列吧,查的时候按拼音列查

感觉你的方法是最好的, 特别是, 数据库 "查询" 操作是最常用的, 增加一个字段不用每次都查找,效率最高

wlue 发表于 2023-6-2 09:38

zpy2 发表于 2023-6-2 05:08
https://club.excelhome.net/forum ... ile&_dsign=cf55a38d
https://club.excelhome.net/forum.php?mod=v ...

您这个是操作 excel 表格的方法,不是操作SQLite数据库的……

wlue 发表于 2023-6-2 09:45

一闪一闪233 发表于 2023-6-1 22:33
你用的是php不是c语言,插入的时候多维护个拼音列吧,查的时候按拼音列查

这样设计数据库有冗余字段呀……
其实我就是想通过一条SQL语句,使查询的结果集显示在页面中,以前用MySQL 和 Access 数据库都支持按照中文字段排序,没想到 SQLite 数据库遇到这个问题……
不过对于一个小型系统 用 SQLite 数据库真的很不错……

zpy2 发表于 2023-6-2 12:44

wlue 发表于 2023-6-2 09:38
您这个是操作 excel 表格的方法,不是操作SQLite数据库的……

COLLATE PY_CMP

law.liu 发表于 2023-6-5 11:44

我一会发帖出来,标题“在PHP结合SQLite数据库中实现中文排序的方法”请留意

wlue 发表于 2023-6-5 16:46

law.liu 发表于 2023-6-5 11:44
我一会发帖出来,标题“在PHP结合SQLite数据库中实现中文排序的方法”请留意

太感谢了!{:1_893:}{:1_921:}{:1_919:}

law.liu 发表于 2023-6-7 15:34

SQLite 默认是不支持中文按拼音排序,但是可以通过引入一个 SQLite 扩展模块ICU实现中文按拼音排序,我之前试过是可行的。
1、你先去 github下载ICU 模块,必须选择适合你系统的版本
2、 把ICU 模块文件,例如 sqlite3_icu.dll 或 sqlite3_icu.so复制到你的项目目录下面
3、在SQLite 中加载 ICU
SELECT load_extension('./sqlite3_icu.dll');
4、创建一个表并插入数据
CREATE TABLE mytable (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO mytable (name) VALUES ('张三'), ('李四'), ('王五');
5、使用 ICU的 COLLATE 子句来指定排序规则
SELECT * FROM mytable ORDER BY name COLLATE "UNICODE COLLATION RULES";
这样可以实现按照中文拼音排序

页: [1] 2
查看完整版本: 求助:Sqlite数据库中文排序问题