我需要在一个表中找到所有只包含某些日语UTF-8字符的条目。
例如,我希望所有字段仅由1(一)和2(二)组成。
我在用

SELECT combi_id, keb FROM combi WHERE keb REGEXP '[二一]+'

但是它匹配许多其他包含不同字符的字段,我做错了什么?
这是桌子:
CREATE TABLE IF NOT EXISTS `combi` (
      `combi_id` int(11) NOT NULL auto_increment,
      `ent_seq` int(11) NOT NULL,
      `reb` text NOT NULL,
      `keb` text NOT NULL,
      `ant` text NOT NULL,
      `ke_pri` text NOT NULL,
      `re_pri` text NOT NULL,
      `re_restr` text NOT NULL,
      `stagr` text NOT NULL,
      `s_inf` text NOT NULL,
      `lsource` text NOT NULL,
      `gloss` text NOT NULL,
      `xref` text NOT NULL,
      `stagk` text NOT NULL,
      PRIMARY KEY  (`combi_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=146740 ;

这是一行数据样本:
(22, 1000225, 'あからさま', '明白|偸閑|白地', '', '', '', '', '', '', '', 'plain|frank|candid|open|direct|straightforward|unabashed|blatant|flagrant', '', ''),

非常感谢你的帮助!

最佳答案

如果只想将列与这些字符匹配,则应使用

SELECT combi_id, keb FROM combi WHERE keb REGEXP '^[二一]+$'

注意开头的^和结尾的$,分别表示“字符串的开始”和“字符串的结束”。没有这些,regexp可以在任何位置匹配。
编辑:测试
mysql> select * from test;
+--------+
| f1     |
+--------+
| 二     |
| 東京   |
| 人     |
| 丸     |
+--------+
4 rows in set (0.00 sec)

mysql> select * from test where f1 regexp _utf8'[一二]';
+--------+
| f1     |
+--------+
| 二     |
| 東京   |
| 人     |
| 丸     |
+--------+
4 rows in set (0.00 sec)

哇,事实上,mysql regexps中的字符类听起来很糟糕。。。
不过,这是可行的:
mysql> select * from test where f1 regexp _utf8'(一|二)';
+------+
| f1   |
+------+
| 二   |
+------+
1 row in set (0.00 sec)

关于mysql - MySQL中的REGEX查找日语匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7065994/

10-11 22:37
查看更多