mysql 删除一个西里尔字母 select 一个西里尔字母

mysql delete one cyrillic word select one cyrillic word

mysql>show full columns from  bpsw;
+--------+------------------+-----------+------+-----+---------+----------------+---------------------------------+---------+
| Field  | Type             | Collation | Null | Key | Default | Extra          | Privileges                      | Comment |
+--------+------------------+-----------+------+-----+---------+----------------+---------------------------------+---------+
| bpswid | int(10) unsigned | NULL      | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| badpsw | varchar(128)     | utf8_bin  | NO   | UNI | NULL    |                | select,insert,update,references |         |
+--------+------------------+-----------+------+-----+---------+----------------+---------------------------------+---------+

别跟我说 not nulldefault null :)

mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+-------------------+
| USER()         | CHARSET(USER()) | COLLATION(USER()) |
+----------------+-----------------+-------------------+
| root@localhost | utf8            | utf8_general_ci   |
+----------------+-----------------+-------------------+
1 row in set (0.00 sec)

table内容:

mysql> select * from bpsw limit X offset XXX ;
+--------+------------------------+
| bpswid | badpsw                 |
+--------+------------------------+
| 495883 | by all manner of means |
| 495884 | by all means           |
| 495885 | by all odds            |
| 495886 | by an ace              |
| 495887 | by an iota             |
| 495888 | by and by              |
| 495889 | by and large           |
| 495890 | by any chance          |
| 495891 | by any manner of means |
| 495892 | by any means           |
+--------+------------------------+
...
|   94950 | яростных                                                    |
|    1599 | ярь-медянка                                                 |
|    1600 | ястреб-перепелятник                                         |
|    1601 | ястреб-тетеревятник                                         |
|   94999 | яфетический                                                 |
|    1603 | яхт-клуб                                                    |
|    1604 | яхт-клуба                                                   |
...
|    1938 | яванский желоб                                              |
|    1939 | яванское море                                               |
|   94690 | еще какое-то слово                                          |
|    1940 | яде-бузен залив                                             |
|   94751 | ядерного                                                    |
|   94755 | раз два-три                                                 | 

需要:select 或从 table 西里尔字母中删除。

需要删除ONE Cyrillic word WITHOUT个数字,没有特殊字符,没有标点字符的行。

删除条件:'^[а-я]+[а-я]$+'

select * from bpsw where badpsw regexp '^[a-z]+[a-z]$+';

用英文单词没问题,但用西里尔字母我就不明白怎么写了。

我认为有必要指定一个整理?

UPD: mysql regex utf-8 characters ?

我可以在这里查看 字节表示中的 西里尔符号的含义吗?

试着看看这个:

这是您要删除的记录吗?

 select  bpswid,badpsw from  Your_Table
 where  badpsw like '%б%' or  badpsw like '%в%'
 or  badpsw like '%г%'
 or   badpsw like '%д%'
 or   badpsw like '%ё%'
 or  badpsw like '%ж%'
 or  badpsw like '%з%'
 or  badpsw like '%и%'
 or  badpsw like '%й%'
 or  badpsw like '%к%'
 or  badpsw like '%л%'
 or  badpsw like '%м%'
 or  badpsw like '%н%'
 or  badpsw like '%п%'
 or  badpsw like '%т%'
 or  badpsw like '%ф%'
 or  badpsw like '%у%'
 or  badpsw like '%ц%'
 or  badpsw like '%ч%'
 or  badpsw like '%ш%'
 or  badpsw like '%щ%'
 or  badpsw like '%ъ%'
 or  badpsw like '%ы%'
 or  badpsw like '%ь%'
 or  badpsw like '%э%'
 or  badpsw like '%ю%'
 or  badpsw like '%я%'
 or  badpsw like '%с%'
 or  badpsw like '%р%'
 or  badpsw like '%х%'
 or  badpsw like '%е%'
or  badpsw like '%о%'

结果:

94950   яростных
1599    ярь-медянка
1600    ястреб-перепелятник
1601    ястреб-тетеревятник
94999   яфетический
1603    яхт-клуб
1604    яхт-клуба
1938    яванский желоб
1939    яванское море
94690   еще какое-то слово
1940    яде-бузен залив
94751   ядерного
94755   раз два-три

如果不是,则只需删除另一个条件相同的。然后继续删除记录。

很简单:

select * from bpsw where badpsw regexp '^[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]+$'; 

https://linux.org.ua/index.php?topic=11272.msg201662#msg201662

SELECT USER(), CHARSET(USER()), COLLATION(USER()); 几乎什么都没说。 USER() returns 由 "user" 来自的 table 定义的字符串。它总是 utf8.

或许你想要的是

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

REGEXP 使用 字节 ,不适用于非 ascii 字符,例如 2 字节的西里尔 utf8 字符. (最近的 MariaDB 版本 可以 处理这样的问题。)

而不是 SHOW FULL COLUMNS...,使用 SHOW CREATE TABLE... —— 这将使列是 NOT NULL 还是 NULL.

更加明显

这可以发现西里尔字符串:

WHERE HEX(col) REGEXP '^(..)*D[0-4]'

因为在 utf8 中,所有西里尔字符都是 2 个字节,其中第一个字节是 HEX D0、D1、D2、D3 或 D4。

SELECT HEX('яростных') REGEXP '^(..)*D[0-4]'; --> 1

您想 "remove" 西里尔字母?如果要删除行,那么 DELETEWHERE 就足够了。如果你想编辑文本,那将需要应用程序代码(除非你有 MariaDB 并且可以使用 REGEXP_REPLACE())。

我是否解决了所有问题?

编辑

要删除 col1 包含 一个西里尔字母的行,

 DELETE FROM tbl
     WHERE HEX(col1) REGEXP '^(D[0-4]..)+$';