Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 博士后9.0+;翻译函数和ascii码_Postgresql_Escaping_Standards - Fatal编程技术网

Postgresql 博士后9.0+;翻译函数和ascii码

Postgresql 博士后9.0+;翻译函数和ascii码,postgresql,escaping,standards,Postgresql,Escaping,Standards,我使用translate函数来处理不区分重音的搜索。 为了改进此请求,我创建了一个匹配索引: CREATE INDEX person_lastname_ci_ai_si ON person USING btree (translate(upper(lastname::text), '\303\200\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210\303\211\303\212\303\213\303\214\303

我使用translate函数来处理不区分重音的搜索。 为了改进此请求,我创建了一个匹配索引:

CREATE INDEX person_lastname_ci_ai_si
ON person
USING btree
(translate(upper(lastname::text), '\303\200\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210\303\211\303\212\303\213\303\214\303\215\303\216\303\217\303\221\303\222\303\223\303\224\303\225\303\226\303\230\303\231\303\232\303\233\303\234\303\235\303\237\303\240\303\241\303\242\303\243\303\244\303\245\303\246\303\247\303\250\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\261\303\262\303\263\303\264\303\265\303\266\303\270\303\271\303\272\303\273\303\274\303\275\303\277'::text, 'AAAAAAACEEEEIIIINOOOOOOUUUUYSaaaaaaaceeeeiiiinoooooouuuuyy'::text)
);
它适用于postgres 9.1,但似乎不适用于9.0。 Postgres 9.0似乎将取代

'\303\200\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210\303\211\303\212\303\213\303\214\303\215\303\216\303\217\303\221\303\222\303\223\303\224\303\225\303\226\303\230\303\231\303\232\303\233\303\234\303\235\303\237\303\240\303\241\303\242\303\243\303\244\303\245\303\246\303\247\303\250\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\261\303\262\303\263\303\264\303\265\303\266\303\270\303\271\303\272\303\273\303\274\303\275\303\277'

然后,因为我的代码使用ascii代码执行搜索,所以它不使用索引

在创建索引时,有没有办法避免postgres将ascii码转换为字符

例如:

select '\303\200\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210\303\211\303\212\303\213\303\214\303\215\303\216\303\217\303\221\303\222\303\223\303\224\303\225\303\226\303\230\303\231\303\232\303\233\303\234\303\235\303\237\303\240\303\241\303\242\303\243\303\244\303\245\303\246\303\247\303\250\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\261\303\262\303\263\303\264\303\265\303\266\303\270\303\271\303\272\303\273\303\274\303\275\303\277'
)

结果

ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïñòóôõöøùúûüýÿ
我怎样才能得到这个结果

\303\200\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210\303\211\303\212\303\213\303\214\303\215\303\216\303\217\303\221\303\222\303\223\303\224\303\225\303\226\303\230\303\231\303\232\303\233\303\234\303\235\303\237\303\240\303\241\303\242\303\243\303\244\303\245\303\246\303\247\303\250\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\261\303\262\303\263\303\264\303\265\303\266\303\270\303\271\303\272\303\273\303\274\303\275\303\277

从9.1版开始,PostgreSQL选项默认为上的

这意味着反斜杠
\
字符按原样处理,而不是转义符号,这样做是为了防止SQL注入攻击;这遵循SQL标准建议。 仍然可以使用
\
获取特殊字符,但只能在内部使用

对于PostgreSQL 9.1之前的版本,我认为以下选项是可能的:

  • 将系统范围的
    标准一致性\u字符串
    选项更改为
  • 上的
    ,但这将影响整个集群,并可能在其他领域产生意外结果

  • 使用
    ALTER ROLE更改a上的
    standard\u compliance\u strings
    选项。。。将标准字符串设置为on,这一个也可能有副作用

  • 使用普通
    将标准字符串设置为on
    作为创建索引之前在会话中发出的第一个命令

  • 将所有反斜杠加倍,以便在
    CREATE INDEX…
    语句中将其视为文本
    \
    符号


  • 让我知道这是否有帮助。

    从9.1版开始,PostgreSQL选项默认为
    上的

    这意味着反斜杠
    \
    字符按原样处理,而不是转义符号,这样做是为了防止SQL注入攻击;这遵循SQL标准建议。 仍然可以使用
    \
    获取特殊字符,但只能在内部使用

    对于PostgreSQL 9.1之前的版本,我认为以下选项是可能的:

  • 将系统范围的
    标准一致性\u字符串
    选项更改为上的
    ,但这将影响整个集群,并可能在其他领域产生意外结果

  • 使用
    ALTER ROLE更改a上的
    standard\u compliance\u strings
    选项。。。将标准字符串设置为on,这一个也可能有副作用

  • 使用普通
    将标准字符串设置为on
    作为创建索引之前在会话中发出的第一个命令

  • 将所有反斜杠加倍,以便在
    CREATE INDEX…
    语句中将其视为文本
    \
    符号


  • 如果有帮助,请告诉我。

    谢谢你的帮助。选择“\303\200\303\201\303\202\303(…)”返回“\303\200\303\201\303\202\303(…)”->好。但是使用btree(translate(substr(supper(replace(firstname::text),::text,::text)),1,1),“\\303\\200\\303\\201\\303\\202\\303\\203\\303\\204\\303(…)在person上创建索引person\u firstname begin\u ci\u ai\u si使用双斜杠值而不是简单斜杠创建索引,即使我使用单斜杠创建索引,PGADMIN也会使用双斜杠值而不是简单斜杠显示索引,但我的搜索很好地使用了创建的索引。感谢您的帮助谢谢您的帮助。选择“\303\200\303\201\303\202\303(…)”返回“\303\200\303\201\303\202\303(…)“->很好。但是使用btree(translate(substr(supper(replace(firstname::text),::text,::text)),1,1),”\\303\\200\\303\\201\\303\\202\\303\\203\\303\\204\\303(…)在person上创建索引person\u firstname begin\u ci\u ai\u si使用双斜杠值而不是简单斜杠创建索引,即使我使用单斜杠创建索引。PGADMIN使用双斜杠而不是简单斜杠显示索引,但我的搜索很好地使用了创建的索引。感谢您的帮助
    \303\200\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210\303\211\303\212\303\213\303\214\303\215\303\216\303\217\303\221\303\222\303\223\303\224\303\225\303\226\303\230\303\231\303\232\303\233\303\234\303\235\303\237\303\240\303\241\303\242\303\243\303\244\303\245\303\246\303\247\303\250\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\261\303\262\303\263\303\264\303\265\303\266\303\270\303\271\303\272\303\273\303\274\303\275\303\277