天道酬勤,学无止境

How to detect Chinese Character in MySQL?

I need to calculate the number of Chinese in a list of columns. For Example, if "北京实业" occur, this is four characters in Chinese but I only count once since it occurs in the column.

Is there any specific code to figure this out?

评论

SELECT COUNT(*)
    FROM tbl
    WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'

will count the number of record with Chinese characters in column col.

Problems:

  • I am not sure what ranges of hex represent Chinese.
  • The test may include Korean and Japanese. ("CJK")
  • In MySQL 4-byte Chinese characters need utf8mb4 instead of utf8.

Elaboration

I am assuming the column in the table is CHARACTER SET utf8. In utf8 encoding, Chinese characters begin with a byte between hex E2 and E9, or EF, or F0. Those starting with hex E will be 3 bytes long, but I am not checking the length; the F0 ones will be 4 bytes.

The regexp starts with ^(..)*, meaning "from the start of the string (^), locate 0 or more (*) 2-character (..) values. After that should be either E-something or F0A. After that, anything can occur. The E-something is, more specifically, E followed by any of 2,3,4,5,6,7,8,9, or F.

Picked at random, I see that encodes as the 3 hex bytes E88D89, and 𠜎 encodes as the 4 hex bytes F0A09C8E.

I do not know of a better way to check a string for a specific language.

As you found, the REGEXP can be rather slow.

This regexp could be over-kill, in that some non-Chinese characters may be captured.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Unicode in MySQL Regex?
    I have the following task: Build a personal dictionary for chinese characters. Users choose single chinese characters from a list. The software then goes through a list of combinations of characters and filters out all that contain characters that are not in the users list of single characters. So if the user studied 1(一) and 10 (十), then 11 (十一) should be shown, but not 12 (十二). The next issue is that there are about 12k single characters and 100k combinations. The whole list can become very long. Currently I am facing the following issue: MySQL does not seem to be able to do proper REGEX
  • 在Java中检测中文字符(Detect Chinese character in java)
    问题 使用Java如何检测字符串是否包含汉字? String chineseStr = "已下架" ; if (isChineseString(chineseStr)) { System.out.println("The string contains Chinese characters"); }else{ System.out.println("The string contains Chinese characters"); } 您能帮我解决问题吗? 回答1 现在, Character.isIdeographic(int codepoint)会告诉您该代码点是否为CJKV(中文,日文,韩文和越南文)表意文字。 最近使用的是Character.UnicodeScript.HAN。 所以: System.out.println(containsHanScript("xxx已下架xxx")); public static boolean containsHanScript(String s) { for (int i = 0; i < s.length(); ) { int codepoint = s.codePointAt(i); i += Character.charCount(codepoint); if (Character.UnicodeScript.of
  • mysql中utf8和utf8mb4区别
    mysql中utf8和utf8mb4区别 一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。 三、问题根源 最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。 utf8 是 Mysql 中的一种字符集
  • 迁移php应用程序以处理UTF-8(Migrating a php application to handle UTF-8)
    问题 我正在使用php中的多语言应用程序。 一切都很好,直到最近我被要求支持汉字。 我为支持UTF-8字符采取的措施如下: 现在所有数据库表均为UTF-8 HTML模板包含标签<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 控制器发出一个标头,该标头指定用于http响应的编码(utf-8) 一切都很好,直到我开始进行一些字符串操作(substr之类的) 使用中文时,它将不起作用,因为中文表示为多字节,因此,如果您使用普通的子字符串(substr),则会在分配的字节之一的中间适当地切出一个“字母”,然后对结果进行** ck处理。屏幕。 我通过将其添加到引导程序中解决了所有问题 mb_internal_encoding("UTF-8"); 并将所有strlen , substr , strstr替换为它们的mb_副本。 为了在php中完全支持UTF-8,我还需要做什么? 回答1 除了替换这些功能之外,还有其他更多功能。 常用表达 您应该将utf8标志添加到所有PCRE正则表达式中,这些表达式可以具有包含非Ascii字符的字符串,以便将模式解释为实际字符而不是字节。 $subject = "Helló"; $pattern = '/(l|ó){2,3}/u'; //The u flag
  • mysql中utf8和utf8mb4区别
    mysql中utf8和utf8mb4区别 一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。 三、问题根源 最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。 utf8 是 Mysql 中的一种字符集
  • 检测字符串中的中文(多字节)字符(Detect chinese (multibyte) character in the string)
    问题 $str = "This is a string containing 中文 characters. Some more characters - 中华人民共和国 "; 如何从该字符串中检测汉字并打印以第一个字符开头并以“-”结尾的部分? (它将是“中文字符。更多字符-”)。 谢谢! 回答1 我已经使用preg_match和正则表达式解决了这个问题: $str = "This is a string containing 中文 characters. Some more characters - 中华人民共和国 "; preg_match(/[\x{4e00}-\x{9fa5}]+.*\-/u, $str, $matches); 回答2 PHP是否将其存储为Unicode? 如果是这样,在最坏的情况下,您可以逐个字符地遍历字符串,直到击中中文范围内的字符串为止。 也可以检查一下PHP:Unicode-手册
  • Detect Chinese character in java
    Using Java how to detect if a String contains Chinese characters? String chineseStr = "已下架" ; if (isChineseString(chineseStr)) { System.out.println("The string contains Chinese characters"); }else{ System.out.println("The string contains Chinese characters"); } Can you please help me to solve the problem?
  • 如何在android中检查给定文本是英文还是中文?(How to check whether given text is english or chinese in android?)
    问题 我正在设计一个中英文的android应用程序。 我想知道用户输入的是英文文本还是中文文本?。 有没有办法在android中检查这个? 回答1 如果您想检测输入的字符串是否包含类中文字符 (CJK),以下内容可能对您有所帮助: public static boolean isCJK(String str){ int length = str.length(); for (int i = 0; i < length; i++){ char ch = str.charAt(i); Character.UnicodeBlock block = Character.UnicodeBlock.of(ch); if (Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS.equals(block)|| Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS.equals(block)|| Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A.equals(block)){ return true; } } return false; } 回答2 接受的答案要么不完整,要么过时。 以下是一些可用于测试字符是否为 CJK 表意文字的方法。
  • How to insert chinese character in mysql table?
    I want to save data in Chinese language in mysql table. Can anyone tell me what settings I have to do for it in mysql and PHP. My table will save data in both English and Chinese some column English other Chinese . Is it possible with single table. Any help will be appreciated.
  • Detect chinese (multibyte) character in the string
    $str = "This is a string containing 中文 characters. Some more characters - 中华人民共和国 "; How do I detect chinese characters from this string and print the part which starts with the first character and ends with "-"? (it would be "中文 characters. Some more characters -"). Thank you!
  • 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本
    中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本 本文介绍 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本 本文由林大佬原创,转载请注明出处,来自腾讯、阿里等一线AI算法工程师组成的QQ交流群欢迎你的加入: 1037662480 a这是中文OCR检测与识别系列教程的第二篇, 这篇文章将继续给大家讲解如何使用最目前最好的模型来进行文本检测, 也就是DBNet. 最文本的可能听说过PSENet, 有可能听说过PSENet++ (PAN), 但从实用性和精度来讲, DBNet比之前的算法都要强, 事实上在笔者用下来, DBNet训练容易, 结果简单移动, 没有太复杂的后处理操作 (优势尤其明显,对比PAN系列). 关于算法的原理我们会做一个简单的阐述, 但今天的目的是教大家如何使用DBNet训练自己的文本检测数据集, 在这里, 我们特指中文. 首先来看看我们能做大的效果: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a2V9zLHV-1599117001314)(https://i.loli.net/2020/07/29/ZsF7Tz2w1gCrkSK.png)] [外链图片转存失败,源站可能有防盗链机制
  • Sql漏洞注入之宽字节注入
    绕过–宽字节注入攻击 宽字节注入攻击 由于sql注入的盛行,不少网站管理员都意识到了这种攻击方式的厉害,纷纷想出不少办法来避免,例如使用一些 Mysql 中转义的函数 addslashes,mysql_real_escape_string, mysql_escape_string等等。其实这些函数就是为了过滤用户输入的一些数据,对特殊的字符加上反斜杠“\”进行转义。 Addslashes()函数:对get、post、cookie等传递的参数中的’、“、\、null等进行转义mysql_real_escape_string()函数:转义如\x00、\n、\r、\、’、“、\x1a等mysql_escape_string:注意,php5.3中已经不使用。 常用符号: 空格 :%20 单引号: %27 #: %23 \ :%5C 字符集: 在了解宽字节注入之前,我们先来看一看字符集是什么。字符集也叫字符编码,是一种将符号转换为二 进制数的映射关系。 几种常见的字符集: ASCII 编码:单字节编码 latin1 编码:单字节编码 gbk 编码:一个字符占1个字节**,两个字节以上叫宽字节**,设置“set character_set_client=gbk”(gbk编码设置),通常导致编码转换的注入问题,尤其是使用php 连接mysql数据库的时候 一个gbk汉字占两个字节,取值范围是
  • MySQL字符集和校对规则(Collation)
    MySQL字符集和校对规则(Collation) 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常见处理操作 字符集的正确实践 MySQL的校对规则 一、字符集(Character set)   是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同。 特点:   ①字符编码方式是用一个或多个字节表示字符集中的一个字符   ②每种字符集都有自己特有的编码方式,因此同一个字符,在不同字符集的编码方式下,会产生不同的二进制 常见字符集:   ASCII字符集:基于罗马字母表的一套字符集,它采用1个字节的低7位表示字符,高位始终为0。   LATIN1字符集:相对于ASCII字符集做了扩展,仍然使用一个字节表示字符,但启用了高位,扩展了字符集的表示范围。   GBK字符集:支持中文,字符有一字节编码和两字节编码方式。   UTF8字符集:Unicode字符集的一种,是计算机科学领域里的一项业界标准,支持了所有国家的文字字符,utf8采用1-4个字节表示字符。 1、MySQL与字符集   只要涉及到文字的地方,就会存在字符集和编码方式。MySQL系统变量值: 2、正确使用字符集   数据库服务端的字符集具体要看存储什么字¬
  • 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题
    之前部署了Zabbix-3.0.3监控系统,在安装数据库时已经将zabbix库设置了utf-8字符。首先确定zabbix开启了中文支持功能:登录到zabbix服务器的数据目录下(前面部署的zabbix数据目录是/data/www/zabbix),打开 locales.inc.php文件[root@Zabbix-server include]# pwd/data/www/zabbix/include[root@Zabbix-server include]# vim locales.inc.php然后登陆zabbix后,点击右上角的“用户”图标,将语言设置为“中文”: 修改为“中文”语言后,添加监控项的配置,发现监控图中出现中文乱码!这个问题是由于zabbix的web端没有中文字库导致,只需要加上中文字库加上即可~解决办法如下:1.从windows下控制面板->字体->选择一种中文字库例如“楷体” 【复制-粘贴出来,然后拷贝到zabbix服务器上】 将这个文件拷贝到zabbix的数据目录的fonts目录下之前部署的zabbix数据目录是/data/www/zabbix[root@Zabbix-server fonts]# pwd/data/www/zabbix/fonts[root@Zabbix-server fonts]#lsDejaVuSans.ttf将上面从windows的
  • [原创]Gerrit中文乱码问题解决方案分享
    应开发同事的要求,部署了Gitlab+Gerrit+Jenkins的持续集成环境.但是发现了一个问题,Gerrit登陆后有中文乱码出现.具体情况如下:(1)Git代码中的中文乱码处理:为妥善解决中文编码的问题,对所有git repository做如下约定:所有文本文件都必须存储成utf8编码全局配置如下:git config --global core.quotepath falsegit config --global i18n.logoutputencoding utf8git config --global i18n.commitencoding utf8另外:安装gerrit的时候对于数据库(选择myqsl方式的话)的编码设定为utf8(2)Gerrit登陆后,设置中文用户名出现乱码即在“Full name”一栏中输入中文名后,刷新一下就会出现“???”的乱码,如下: 后来想到,可能是在创建gerrit数据库的时候没有自定义编码为utf8 登陆数据库,查看编码:mysql> show variables like '%character%';+--------------------------+----------------------------------+| Variable_name | Value |+--------------------------+--
  • Windows环境下MySQL5.7中文显示乱码的三种解决方案
    最近在将数据从Oracle迁移到MySQL的过程中,遇到一些问题,其中就包括中文字符显示乱码。 数据导入成功之后,中文字段内容无法正常显示。后来才发现客户端的字符集设置是对的,服务器端的字符集设置不支持中文字符。 后来经过测试发现,我们可以通过三种方法解决这个问题,按照从低到高的级别分别是: 表级数据库级服务器级1.测试环境 Windows Server 2008 r2+MySQL Community Server (GPL) 5.7.16 我是在Windows Server 2008 r2环境下进行测试,创建了测试数据库hoegh。 点击(此处)折叠或打开mysql>mysql> create database hoegh;Query OK, 1 row affected (0.00 sec)mysql>mysql> show create database hoegh;+----------+------------------------------------------------------------------+| Database | Create Database |+----------+------------------------------------------------------------------+| hoegh | CREATE
  • MySQL字符集和校对规则(Collation)
    MySQL字符集和校对规则(Collation) 阅读目录:MySQL的字符集和校对规则MySQL的字符集 MySQL与字符集正确使用字符集MySQL客户端与字符集字符集编码转换原理字符集常见处理操作字符集的正确实践MySQL的校对规则一、字符集(Character set)  是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同。特点:  ①字符编码方式是用一个或多个字节表示字符集中的一个字符  ②每种字符集都有自己特有的编码方式,因此同一个字符,在不同字符集的编码方式下,会产生不同的二进制常见字符集:  ASCII字符集:基于罗马字母表的一套字符集,它采用1个字节的低7位表示字符,高位始终为0。  LATIN1字符集:相对于ASCII字符集做了扩展,仍然使用一个字节表示字符,但启用了高位,扩展了字符集的表示范围。  GBK字符集:支持中文,字符有一字节编码和两字节编码方式。  UTF8字符集:Unicode字符集的一种,是计算机科学领域里的一项业界标准,支持了所有国家的文字字符,utf8采用1-4个字节表示字符。1、MySQL与字符集  只要涉及到文字的地方,就会存在字符集和编码方式。MySQL系统变量值: 2、正确使用字符集  数据库服务端的字符集具体要看存储什么字符以上这些参数如何起作用:1.库、表、列字符集的由来
  • MySQL 操作命令梳理(4)-中文乱码问题
    在平时的mysql运维操作中,经常会碰到插入中文字段后出现乱码的情况,产生中文乱码的原因一般有:1)mysql的编码格式不对,是latin1编码。强烈推荐将mysql下的编码格式都改为utf8,因为它兼容世界上所有字符!2)mysql的表的语系设定问题(包含character与collation)3)客户端程式(例如php)的连线语系设定问题下面就对Mysql下处理数据表中中文字段乱码问题的操作做一记录:为了防止后续操作出现乱码现象,最好在创建库或数据表的时候就设置正确的编码。 创建数据库的时候,设置编码格式mysql> CREATE DATABASE hqsb -> CHARACTER SET utf8 -> COLLATE utf8_general_ci; Query OK, 1 row affected (0.01 sec) 创建表的时候,设置编码格式mysql> use hqsb; Database changed mysql> CREATE TABLE haha ( -> id int(10) PRIMARY KEY AUTO_INCREMENT, -> name varchar(64) NOT NULL -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.02 sec)这3个设置好了
  • 无法将中文字符插入MySQL(Can't insert Chinese character into MySQL)
    问题 Cookie是使用big5集编码的,因此无法插入MySQL。 您能帮我解决这个问题吗? 字段: username是eng, date1是日期, reason1是汉字。 $reason1 = $_COOKIE["reason"]; $sql2="INSERT INTO attendance_count(username,date,count_time,appendix) VALUES ('$username','$date1','0','$reason1')"; mysql_query($sql2); 回答1 创建表时,请使用UTF-8 。 create table table_name () CHARACTER SET = utf8; 插入表格时使用UTF-8 set username utf8; INSERT INTO table_name (ABC,VAL); 阅读更多 和更多 详细代码 下面的代码是经过测试的代码,请做以下工作。 如果您已经创建了数据库,请按以下代码更改它。 如果没有创建数据库,则创建数据库并将Collat​​ion设置为utf8_unicode_ci 与表相同,对于要在其中存储chines字符的表字段,将归类定义为“ utf8_unicode_ci”。 ALTER DATABASE `stackoverflow` DEFAULT CHARACTER
  • 解决Docker安装MySQL中文乱码问题
    问题描述:使用docker安装完mysql,出现中文乱码,如下; 解决方法如下: 1、启动mysql: docker start mysql 2、进入容器: docker exec -it mysql /bin/bash 3、登陆mysql: mysql -u root -p 4、查看数据库默认字符集: SHOW VARIABLES LIKE 'character_set_%'; 可以看到,默认是latin1,connection 就是我们通过客户端连接的时候指定的编码。 外部访问数据乱码的问题就出在这个connection连接层上。 5、将字符集修改为utf-8格式: SET NAMES 'utf8mb4'; 相当于以下三条指令: SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8; 6、修改配置文件: ① 进入配置文件目录,并且安装必要的软件,如下: ② 修改my.cnf [mysqld] 标签下加上2行 default-character-set = utf8mb4 character_set_server = utf8mb4 [mysql] 标签下加上一行 default-character-set = utf8mb4