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 null
和 default 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" 西里尔字母?如果要删除行,那么 DELETE
和 WHERE
就足够了。如果你想编辑文本,那将需要应用程序代码(除非你有 MariaDB 并且可以使用 REGEXP_REPLACE()
)。
我是否解决了所有问题?
编辑
要删除 col1 包含 仅 一个西里尔字母的行,
DELETE FROM tbl
WHERE HEX(col1) REGEXP '^(D[0-4]..)+$';
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 null
和 default 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" 西里尔字母?如果要删除行,那么 DELETE
和 WHERE
就足够了。如果你想编辑文本,那将需要应用程序代码(除非你有 MariaDB 并且可以使用 REGEXP_REPLACE()
)。
我是否解决了所有问题?
编辑
要删除 col1 包含 仅 一个西里尔字母的行,
DELETE FROM tbl
WHERE HEX(col1) REGEXP '^(D[0-4]..)+$';