如何在MySQL中查询包含亚洲语言字符的文本?

2024-01-09

我有一个使用 UTF-8 字符集的 MySQL 表,其中有一个名为 WORDS 的长文本类型列。此列中的值由用户输入,长度为几千个字符。

该表中有两种类型的行:

  1. 在某些行中,WORDS 值是由说英语的人组成的,并且仅包含普通英语写作中使用的字符。 (并非所有内容都必须是 ASCII,例如欧元符号 http://www.fileformat.info/info/unicode/char/20ac/index.htm在某些情况下可能会出现。)

  2. 其他行具有由亚洲语言(韩语、中文、日语以及可能的其他语言)使用者编写的 WORDS 值,其中包括英语单词和使用其本地语标字符(而不是例如日语罗马字)的亚洲语言单词的混合)。

如何编写一个查询来返回所有类型 2 的行而不返回类型 1 的行?或者,如果这很难,有没有办法查询most这样的行(这里如果我错过了一些类型 2 的行,或者包含一些类型 1 的误报,也没关系)?

更新:下面的评论建议我最好完全避免使用 MySQL 查询引擎,因为它对 unicode 的正则表达式支持听起来不太好。如果这是真的,我可以将数据提取到文件中(使用mysql -B -e "some SQL here" > extract.txt),然后在文件上使用 perl 或类似的命令。使用这种方法的答案是可以的(但不如本地 MySQL 的好!)


理论上你可以这样做:

  1. 找到您要测试的 unicode 范围。
  2. 手动将开头和结尾编码为 UTF-8。
  3. 使用每个编码的开始和结束的第一个字节作为 REGEXP 的范围。

我相信 CJK 的范围与欧元符号之类的东西相距足够远,因此误报和误报很少或根本没有。

Edit:我们现在已经将理论付诸实践了!

Step 1:选择字符范围。我建议\u3000-\u9fff;易于测试,并且应该会给我们带来近乎完美的结果。

Step 2:编码成字节。(维基百科 utf-8 页面) http://en.wikipedia.org/wiki/UTF-8

对于我们选择的范围,utf-8 编码值将始终为 3 个字节,第一个字节是 1110xxxx,其中 xxxx 是 unicode 值的最高有效四位。

因此,我们想要处理 11100011 到 11101001 或 0xe3 到 0xe9 范围内的字节。

Step 3:使用非常方便的(我刚刚发现的)UNHEX 函数来制作我们的正则表达式。

SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')

刚刚尝试了一下。奇迹般有效。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在MySQL中查询包含亚洲语言字符的文本? 的相关文章

  • 无法从我的 java 应用程序访问 mysql 数据库(在 AWS 实例上运行)

    我有一个在 AWS EC2 Ubuntu 实例上运行的 xampp 服务器 并且那里有一个名为 androiddb 的数据库 我可以通过在导航器中写入来访问数据库http public ip phpmyadmin http public i
  • XP及PHP MYSQL 练级系统

    我已经查看了所有提出的问题和答案 但我似乎找不到最适合我的答案 我想做的是开发一个系统 当用户达到一定的 XP 限制时 系统会进入下一个级别 它显示了下一个 XP 之前需要多少 XP So lvl1 0 gt lvl2 256 gt lvl
  • MySQL查询,删除所有空格

    我有一个不寻常的查询 这让我现在陷入困境 表字段有 id bigint 20 name varchar 255 desc text 有许多记录具有相同的名称和 desc 但 desc 的单词之间有一些额外的空格 like 1 t1 hell
  • 如何将条件聚合 mysql 转换为 laravel 查询?

    我的sql查询是这样的 SELECT a number a description MAX CASE WHEN b attribute code brand then b attribute value END as brand MAX C
  • 使用 pygame 显示 unicode 符号

    我检查了其他答案 但不明白为什么我的代码错误地显示 This is what I currently see https i stack imgur com 8tNIK png 这是关于文本渲染的相关代码 font pygame font
  • 在 BIRT 中输入参数后更新数据集查询

    在 BIRT 报告设计中传递参数后 如何更改或更新数据集的查询 详细说明 我有一个如下所示的查询 WHERE 该参数标记可以保存不同的值 在用户输入参数后 它看起来像这样 例如 WHERE column name 1 or WHERE co
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • ODBC 链接表中突然开始出现写入冲突消息

    我有一个 mySQL 数据库 用于跟踪我们的项目并驱动我们的网站显示其信息 为了方便更新数据库 我设置了一个使用 ODBC 连接 MySQL ODBC 5 1 来编辑数据的访问数据库 过去几个月一直运行良好 没有出现任何问题 然而 昨晚用户
  • 按值和键对哈希进行排序(按顺序)

    我正在寻找一种很好的方法来在 Perl 中先按值排序 然后再按键排序 Example my userids williams gt Marketing smith gt Research johnson gt Research jones
  • Innodb页面大小设置

    在innodb中 页面大小默认为16kb 如何将页面大小设置为 8kb 是否有在源编译步骤中设置的选项 您不需要在源编译步骤中指定页面大小 MySQL 5 6 及更高版本支持不同的页面大小 无需重新编译 但是 您必须在初始化 InnoDB
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • 主键默认可以为NULL吗?为什么这样描述呢?

    我有一张桌子 当我describe这是 mysql gt DESC my table Field Type Null Key Default Extra contact id int 11 NO PRI NULL auto incremen
  • 如何使用 SQL 对项目进行排序,然后按另一个条件再次排序

    我正在使用 MySQL 我想对记录进行排序 或者我想对记录进行分组 然后按另一个条件再次对其进行排序 例如我有 6 个项目 Names Group Jack G1 Dian G2 Emily G2 Dean G1 Teddy G2 Gabe
  • 连接两个表而不返回不需要的行

    我的表结构如下所示 tbl users tbl issues userid real name issueid assignedid creatorid 1 test 1 1 1 1 2 test 2 2 1
  • 使用 php 和 mysql 计算日期差(以小时为单位)

    我如何使用 php 和 mysql 找到以小时为单位的日期差异 Use TIMEDIFF http dev mysql com doc refman 5 1 en date and time functions html function
  • PDO获取最后插入的ID

    我有一个查询 我想获取插入的最后一个 ID 字段ID是主键并且自动递增 我知道我必须使用这个声明 LAST INSERT ID 该语句适用于如下查询 query INSERT INTO cell place ID VALUES LAST I
  • 如何在 Ansible 中运行 MySQL 查询

    我需要编写一个 Ansible 脚本来在 MySQL 数据库中执行 SQL 查询 这是我尝试过的 你能指导一下吗 hosts localhost tasks name retrive data command mysql u root h
  • 在内连接中重用 mysql 子查询

    我正在尝试优化查询 试图避免重复用 指示的查询 复杂查询 使用两次 结果相同 原始查询 SELECT news FROM news INNER JOIN SELECT myposter FROM SELECT COMPLEX QUERY U
  • 将 Unicode 字符转换为等效的 ASCII 字符

    为了索引和搜索的目的 我需要 展平 一些 Unicode 字符串 例如 我需要转换G the 转换为 ASCII 最后两个字符在 ASCII 中没有紧密的表示 因此可以完全丢弃它们 所以我的期望是 echo iconv UTF 8 ASCI
  • unicode().decode('utf-8', 'ignore') 引发 UnicodeEncodeError

    这是代码 gt gt gt z u u2022 decode utf 8 ignore Traceback most recent call last File

随机推荐

  • 以十进制形式返回日期差异

    我试图以更高精度以小数形式返回两个日期之间的年数 例如 如果相差 1 年 1 个月 15 天 我想 返回值 1 15 或类似的值 最终 在这个 例如 我想显示差异是 1 年 1 个月又 15 天 差值以小数形式显示 我能够返回小数值 但我不
  • 这种方法是否有更快的替代方法来从字典列表中获取最后更新消息?

    我需要从数据流中获取最后的更新消息 数据是这样的 test data u category u 3 u entity u entityA u length u 0 u timestamp u 1562422690 u category u
  • iPhone/iPad HTML5 Canvas fillText问题

    使用 iPhone 或 iPad 时 我在画布上的文本方面遇到了奇怪的问题 文本要么被正确绘制 很少 要么被颠倒绘制 要么根本不被绘制 当文本确实成功绘制时 它会在 iPhone Pad 旋转时被擦除 我有以下代码 看来 如果我使用 set
  • 如何删除 VC 2008 中的“错误 C4335:检测到 Mac 文件格式”

    我现在用VC 2008编译一个项目 得到的错误如下 Error 7 error C4335 Mac file format detected please convert the source file to either DOS or U
  • 如何在 Spring MVC 测试中检查 JSON 响应

    我在 web xml 中定义了一个 servlet 因此我将其定义在 Controller 中 仅用于测试MyResource Controller public class TestMyServlet MyResource servlet
  • 开始为 JVM 分配内存

    我开始使用 Xmx上的选项java命令允许我的进程使用更多的内存 256Mb 尽管我认为我当前使用的内存少于 128Mb 我还注意到 Xms启动内存选项 默认值为 2Mb 我应该将此值设置为多少以及为什么 参考 Java http java
  • BASE64 编码和解码不起作用

    我正在 Delphi XE5 中开发 android 应用程序 我需要 BASE64 编码和解码一些字符串 这个函数对于英文字符工作正常 但是我想要编码 或任何特殊的 iso8859 2 字符编码不起作用 知道如何修复它吗 我找到了 BAS
  • 安装了测试适配器的 NUnit 单元测试未显示在测试资源管理器中

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 我已经为 VS2012 2013 安装了 NUnit 测试适配器 当我第一次安装适配器测试时 它们会显示出来 但今天由于某种原
  • 如何在 NHibernate 中克隆对象?

    NHibernate中如何实现对象 实体 克隆 每个实体类都有这样的属性 public virtual IList
  • Java (Android) 中的调试模式(正则表达式)失败

    我正在一段代码中进行模式匹配 该代码在一种情况下运行良好 但在另一种情况下则不然 目前的代码是 DLVRYrx Pattern compile d s p Letter s d s d d s d Log d TAG Regex match
  • django 模型保存 - 迁移期间未调用覆盖方法

    我的模型类中有一个保存覆盖方法 每次保存对象时都会生成一个新的 slug def save self args kwargs if self column2 self slug slugify self column1 self colum
  • before_filter 语法,当你想要“排除”控制器“abc”时

    在 Rails 中 当您想要 排除 控制器 abc 时 before filter 语法是什么 例如 在 application controller 中 如果我想说 before filter login required except
  • 如何通过代码查找黑莓中的应用程序大小?

    我想知道如何通过代码查找黑莓中的应用程序大小 我想在单击按钮时显示正在运行的应用程序名称及其大小 那么我应该怎么做 我给出了一些解释 请参阅此链接 https stackoverflow com a 9074486 914111 https
  • 手写文字识别php

    我正在考虑创建一个特定的网络系统 它涉及许多不同的 随机 人上传他们所写内容的扫描文档 有没有PHP开源方法可以将这些手写文本转换为机器文本 我找到了这个question https stackoverflow com questions
  • eax 与其他寄存器相比的不同行为

    我编写了一个小的汇编代码片段 Gas 32 位 它接受命令行参数 计算其字符并打印字符串 如果它具有一定的长度 仅用于调试目的 我对汇编比较陌生 所以我很确定我在这里错过了一些东西 因为当我将字符串存储在 eax 中时 与 ecx edx
  • 将日期时间更改为 MVC 3 C# 中的日期

    我正在使用 MVC 3 和 C 在下拉列表中显示日期时遇到问题 日期显示如下 2011年4月21日 12 00 00上午 但我只想这样格式化它们 2011年4月21日 这正是我数据库中的格式 数据库中的日期属性是日期而不是日期时间 模型中的
  • 使用底部导航 android kotlin 在片段中实现 MVVM 的最佳实践

    我正在使用 firebase 的底部导航在片段中实现 MVVM 但它不适用于我的情况 我搜索了很多解决方案 但没有解决我的问题 我在片段中实现了 viewModel 并将观察者应用于它 在 ViewModel 类中 从存储库调用返回类型为
  • LINQ:按聚合分组但仍从最新行获取信息?

    假设我有一个保存运输历史记录的表 我想编写一个查询来计算每个用户的发货量 并从该用户表中的最新条目获取发货名称 为简单起见 表结构 货件编号 会员ID 运输名称 发货日期 如何编写 LINQ C 查询来执行此操作 听起来可能想要类似的东西
  • Django/mod_wsgi/Apache - mod_wsgi 未使用为其编译的 Python 版本 - “ModuleNotFoundError:没有名为 'math' 的模块”

    我正在尝试在 Ubuntu 16 04 6 服务器上部署带有 Apache2 和 mod wsgi 的 Django 应用程序 但我正在努力让 mod wsgi 使用正确的 python 版本 我从源代码安装了 mod wsgi 并且配置它
  • 如何在MySQL中查询包含亚洲语言字符的文本?

    我有一个使用 UTF 8 字符集的 MySQL 表 其中有一个名为 WORDS 的长文本类型列 此列中的值由用户输入 长度为几千个字符 该表中有两种类型的行 在某些行中 WORDS 值是由说英语的人组成的 并且仅包含普通英语写作中使用的字符