数据库开发者社区 > 正文

PostgreSQL 中生成随机汉字

简介:
+关注继续查看

标签

PostgreSQL , 字符集 , 汉字编码 , 随机汉字 , chr , ascii , unicode


背景

汉字unicode编码范围

php中utf-8编码下用正则表达式匹配汉字的最终正确表达式 ——   
/[\x{4e00}-\x{9fa5}]/u  
\u4e00-\u9fa5 (中文)  
\x3130-\x318F (韩文)  
\xAC00-\xD7A3 (韩文)  
\u0800-\u4e00 (日文)  

4e00 对应 19968

9fa5 对应 40869

一共 20901 个汉字

例子1

  • 注意,为了保证能输出所有的汉字,确保数据库的编码为UTF8,否则会报类似错误。
db=# select '\u9fa5'::text;  
ERROR:  Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8 at or near "'\u9fa5"  
LINE 1: select '\u9fa5'::text;  
               ^  

例子

set standard_conforming_strings =off;  
set escape_string_warning=off;  
  
postgres=# select '\u9fa5'::text;  
 text   
------  
 龥  
(1 row)  

例子2

除了unicode的写法,PostgreSQL还提供了两个函数,支持数值的写法。

Function Return Type Description Example Result
ascii(string) int ASCII code of the first character of the argument. For UTF8 returns the Unicode code point of the character. For other multibyte encodings, the argument must be an ASCII character. ascii('x') 120
chr(int) text Character with the given code. For UTF8 the argument is treated as a Unicode code point. For other multibyte encodings the argument must designate an ASCII character. The NULL (0) character is not allowed because text data types cannot store such bytes. chr(65) A
postgres=# select chr(19968);  
 chr   
-----  
 一  
(1 row)  

输出所有汉字

例子

do language plpgsql $$  
declare  
  res text := '';  
begin  
  for i in 19968..40869 loop  
    res := res||chr(i);  
  end loop;  
  raise notice '%', res;  
end;  
$$;  
  
NOTICE:  一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝.............................  

输出随机汉字

例子

创建函数

create or replace function gen_hanzi(int) returns text as $$  
declare  
  res text;  
begin  
  if $1 >=1 then  
    select string_agg(chr(19968+(random()*20901)::int), '') into res from generate_series(1,$1);  
    return res;  
  end if;  
  return null;  
end;  
$$ language plpgsql strict;  

使用函数,生成随机汉字

postgres=# select gen_hanzi(10);  
      gen_hanzi         
----------------------  
 析埲錀噝穎灯嬪閸醿厧  
(1 row)  
  
postgres=# select gen_hanzi(10);  
      gen_hanzi         
----------------------  
 仫哸擡襖批梹繜嚪隶別  
(1 row)  

参考

http://baike.baidu.com/item/Unicode

http://unicode.org/charts/

https://en.wikipedia.org/wiki/Unicode

《PostgreSQL 转义、UNICODE、与SQL注入》

http://stackoverflow.com/questions/3970795/how-do-you-create-a-random-string-thats-suitable-for-a-session-id-in-postgresql

https://www.postgresql.org/docs/9.6/static/functions-string.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【数据库架构】PostgreSQL的最佳群集高可用性方案
【数据库架构】PostgreSQL的最佳群集高可用性方案
19 0
「关系型数据库」数据库深度探索:PostgreSQL最有潜力和学习价值
「关系型数据库」数据库深度探索:PostgreSQL最有潜力和学习价值
10 0
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
20 0
「PostgreSQL高级特性」PostgreSQL 数据库的近似算法
「PostgreSQL高级特性」PostgreSQL 数据库的近似算法
10 0
「数据库选型」抛弃MongoDB,拥抱PostgreSQL,工作更轻松
「数据库选型」抛弃MongoDB,拥抱PostgreSQL,工作更轻松
16 0
「数据库选型」卫报从MongoDB迁移到Amazon RDS上的PostgreSQL
「数据库选型」卫报从MongoDB迁移到Amazon RDS上的PostgreSQL
20 0
数据库领域前沿技术分享与交流
+关注
德哥
公益是一辈子的事, I am digoal, just do it.
文章
问答
视频
相关电子书
更多
金融级 PostgreSQL监控及优化
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像