- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在使用阿拉伯语文本进行变音符号不敏感搜索时遇到问题。
我已经为相关表格测试了多种设置:utf8 和 utf16 编码以及 utf8_general_ci、utf16_general_ci 和 utf16_unicode_ci 中的归类。
搜索适用于 åä 特殊字符。即:
select * from test where text like '%a%'
将返回文本为 a、å 或 ä 的列。但它不适用于阿拉伯变音符号。即,如果文本是 بِسْمِ 并且我搜索 بسم,我没有得到任何匹配项。
有什么想法可以通过吗?
真正的用法稍后将是 PHP(搜索功能),但在将其移植到 PHP 之前,我直接在 MySQL 数据库中工作只是为了测试。
(来自评论)
CREATE TABLE test (
↵ id int(11) unsigned NOT NULL AUTO_INCREMENT,
↵ text text COLLATE utf8_unicode_ci,
↵ PRIMARY KEY (id)↵
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
最佳答案
SHOW COLLATIONS;
查看可用的排序规则。在我的版本中,我没有看到任何看起来适合阿拉伯语的内容。但是,utf8_unicode_ci
似乎可以进行您想要的折叠。这是一个简单的尝试方法:
SELECT 'بِسْمِ' = 'بسم' COLLATE utf8_unicode_ci;
我得到的结果是 1(真),这意味着它们被认为是相等的。使用 utf8_general_ci
返回 0,表示不相等。
然后将您的字段声明为 VARCHAR(...)(或 TEXT)CHARACTER SET utf8 COLLATE utf8_unicode_ci
;对于 utf8mb4 也是如此。
要构建您自己的归类(并提交以包含在未来的版本中),请参阅 http://dev.mysql.com/doc/refman/5.6/en/adding-collation.html
关于MySQL 变音符号不敏感搜索(阿拉伯语),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28863402/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!