使用regex-unicode的mysql查询
mysql query with regex unicode
我想做一个mysql查询来捕获:أرأء
该字符أ
可以键入为:(أ
或إ
或ا
或آ
)
所以当类型:
$SQL=" select * from work where title REGEX '[''u0622|''u0623|''u0625|''u0627][''u0631][''u0622|''u0623|''u0625|''u0627][''u0621]"
它不起作用,我认为语法不好
MySQL没有''u转义。尝试在查询字符串中包含原始Unicode字符,并通过utf8连接将其传递给MySQL。如何做到这一点取决于您使用何种语言和连接器与MySQL进行对话。最好是在参数中传递模式字符串,该参数来自您的语言的本地Unicode字符串类型(如果您有);例如,在Python MySQLdb中,我只能做:
group= u'[أإاآ]'
pattern= u'%sر%sء' % (chars, chars)
connection.execute('SELECT * FROM work WHERE title REGEX %s', [pattern])
(nb正则表达式字符组中不需要管道字符)
如果你真的根本无法连接Unicode,MySQL确实有一个非标准的二进制字符串转义,你可以使用它通过另一种编码来获取字符:
WHERE title REGEX 0x5bd8a3d8a5d8a7d8a25dd8b15bd8a3d8a5d8a7d8a25dd8a1 AS utf8 - hex-encoded UTF-8 encoded string
通常,您希望避免使用REGEX
,因为这意味着title
列上的任何索引都将无效,并且将强制进行全表搜索。
一种替代方案是执行WHERE title IN
,列出与表达式匹配的所有16个可能字符串。
(最具性能的方法是使用数据库排序规则,该规则已经将所有四个字符视为相等。不过,我不知道有哪个排序规则与之匹配。)
Alef这4个变体的utf8是D8A3 D8A5 D8A7 D8A2。所以,
WHERE HEX(title) REGEXP '^(..)*D8(A3|A5|A7|A2)'
将检查是否存在它们中的任何一个。
^(..)*
匹配title
开头的任意数量的字符对(在本例中为十六进制),然后查找这些2字节utf8代码中的任何一个。
这可能就是你所追求的:
$SQL=" select * from work
where HEX(title)
REGEX '^(..)*D8(A2|A3|A5|A7)D8B1D8(A2|A3|A5|A7)D8A1';
^(..)*
是跳过偶数个十六进制字符(以保持对齐)D8(A2|A3|A5|A7)
是用于4个Alef的utf8编码D8B1
用于Reh。
相关文章:
- 在node.js-mysql中执行UPDATE查询不起作用
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 浓缩一系列mySQL查询
- 如何翻译MySQL查询's ResultSet转换为整数
- 如何在mysql查询(NODE.js)中重复使用一个参数
- onclick->mysql查询->javascript;同一页
- 向更新mysql查询传递一个id
- 如何在下拉列表更改时自动填充mysql查询结果中的文本框值
- mysql查询一次在单个查询中的多个表中插入记录
- 添加行并运行多个mySQL查询
- 如何将mysql查询的结果获取到html文本框中
- 数组数据排序类似mysql查询
- 使用jquery显示mysql查询结果
- PHP MySQL 在一个页面和一个查询中插入具有多行的数据
- 在“onexit”或“onsubmit”之后,查询mysql并填充表单字段,而无需离开页面php js
- 使用下拉列表中的值查询 MySQL 数据库,然后使用结果填充文本字段而不刷新页面
- 通过JavaScript中的PHP查询MySQL,时间间隔
- Highcharts标签格式化器查询mysql
- 限制PHP查询mysql数据库的非空行
- 使用Node.JS查询MySQL,并在网页中显示结果