AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 167566
Accepted
Suncatcher
Suncatcher
Asked: 2017-03-20 09:21:11 +0800 CST2017-03-20 09:21:11 +0800 CST 2017-03-20 09:21:11 +0800 CST

从 Postgres 查询非 ASCII 行

  • 772

[:ascii:]类在 Postgres 中是否有效?它没有在他们的帮助中列出,但是我在网上看到了使用它的示例。

我有一个 UTF-8 数据库,其中collat ​​ion和c_type e 是en_US.UTF-8,Postgres 版本是 9.6.2。当我搜索这样的非 ASCII 行时:

select title from wallabag_entry where title ~ '[^[:ascii:]]';

我得到了Unicode 和非 Unicode 符号(完整输出在这里):

Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over 

这个查询有什么问题?

postgresql utf-8
  • 1 1 个回答
  • 20300 Views

1 个回答

  • Voted
  1. Best Answer
    joanolo
    2017-03-20T10:30:57+08:002017-03-20T10:30:57+08:00

    回答你的问题:[:ascii:]有效。您的文本中可能有一些您无法识别为non-ASCII 的字符,但它们确实存在。例如,它们可以是不可破坏的空格,也可以是任何其他Unicode 空格字符。

    从网页复制粘贴的文本中包含不可破坏的空格( )并不奇怪,但您却没有注意到它们的存在。 

    这是一个示例:

    WITH t(t) AS
    (
        VALUES 
          ( 'Сталинская правозащитница: мать Меленкова бабушка Настя' ),
          ( 'Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?' ),
          ( 'Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев' ),
          ( 'Как комиссар Крекшин в 1740-е чуть не отменил историю России' ),
          ( 'Have you heard of Saint Death? Don’t pray to her.' ),
          ( 'Архаїчна українська мова: перевага чи недолік?' ),
          ( 'Гренада не их' ),
          ( 'China’s marriage rate is plummeting because women are choosing autonomy over ' )
    
    )
    SELECT 
        t,  regexp_replace(t, '([^[:ascii:]])', '[\1]', 'g') AS t_marked
    FROM 
        t 
    WHERE 
        t ~ '[^[:ascii:]]' ;
    

    这就是你得到的:

                                           t                                       |                                                                                                 t_marked                                                                                                  
    -------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     Сталинская правозащитница: мать Меленкова бабушка Настя                       | [С][т][а][л][и][н][с][к][а][я] [п][р][а][в][о][з][а][щ][и][т][н][и][ц][а]: [м][а][т][ь] [М][е][л][е][н][к][о][в][а] [б][а][б][у][ш][к][а] [Н][а][с][т][я]
     Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?               | [Д][н][е][в][н][и][к] [Н][К][В][Д][и][с][т][а] [Ш][а][б][а][л][и][н][а]: [З][н][а][е][т] [л][и] [М][о][с][к][в][а] [п][о][л][о][ж][е][н][и][е] [н][а] [ф][р][о][н][т][е]?
     Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев   | [Б][е][г] [п][о] [г][о][р][о][д][у] [и] [п][о][е][з][д][к][а] [н][а] [о][с][л][е]: [к][а][к] [в] [с][р][е][д][н][е][в][е][к][о][в][ь][е] [н][а][к][а][з][ы][в][а][л][и] [п][р][е][л][ю][б][о][д][е][е][в]
     Как комиссар Крекшин в 1740-е чуть не отменил историю России                  | [К][а][к] [к][о][м][и][с][с][а][р] [К][р][е][к][ш][и][н] [в] 1740-[е] [ч][у][т][ь] [н][е] [о][т][м][е][н][и][л] [и][с][т][о][р][и][ю] [Р][о][с][с][и][и]
     Have you heard of Saint Death? Don’t pray to her.                             | Have you heard of Saint Death? Don[’]t pray to her.
     Архаїчна українська мова: перевага чи недолік?                                | [А][р][х][а][ї][ч][н][а] [у][к][р][а][ї][н][с][ь][к][а] [м][о][в][а]: [п][е][р][е][в][а][г][а] [ч][и] [н][е][д][о][л][і][к]?
     Гренада не их                                                                 | [Г][р][е][н][а][д][а] [н][е] [и][х]
     China’s marriage rate is plummeting because women are choosing autonomy over  | China[’]s marriage rate is plummeting because women are choosing autonomy over 
    

    您可以从中看出,您的问题是右撇号字符。ASCII 仅支持撇号。左撇号和右撇号是印刷正确的 Unicode 扩展。

    dbfiddle在这里

    您也可以在http://rextester.com/UKIQ48014 (PostgreSQL 9.5) 和http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)上查看以前的版本


    我猜你认为的文本是纯 ASCII,而不是:

     WITH t(t) AS
     (
         VALUES 
           ('A fully ASCII text!'),
           ('Have you heard of Saint Death? Don’t pray to her.'),
           ('China’s marriage rate is plummeting because women are choosing autonomy over ')
     )
     SELECT 
        regexp_replace(t, '([^[:ascii:]])', '[\1]', 'g') AS t_marked
     FROM 
        t 
     WHERE 
        t ~ '[^[:ascii:]]' ;
    
    | 标记 |
     | :------------------------------------------------ ------------------------------ |
     | 你听说过圣死吗?不要[']向她祈祷。|
     | 中国结婚率直线下降,因为女性选择自主权|
     

    dbfiddle在这里

    这些文本使用'而不是'来标记撇号。

    检查标点符号:为什么正确的单引号 (U+2019),而不是语义上不同的撇号 (U+0027),是 Unicode 中的首选撇号字符?...看到你不是第一个遇到这个问题的人。

    • 33

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve