首页 新闻 会员 周边

oracle的varchar2选择byte作单位的时候,utf8情况下,一个汉字到底占3个or4个字节?

0
悬赏园豆:20 [已解决问题] 解决于 2019-08-21 14:14

如题,
为什么纠结这个问题呢?
网上搜了一大堆,有人说3,有人说4,有人说3到4,卧槽.....
因为如果不确定3or4的话,那么就无法确定,到底前端提示用户最多输入多少个汉字。
比如一个姓名字段的输入框,数据库是varchar2(40byte),
如果3的话,最多输入13个汉字;
如果4的话,最多输入10个汉字;
但是,又不知道哪些汉字占4个字节,卧槽!
本来想用冗余的办法,就当全部占4个字节,但是有点不甘心啊;
实战搞不定,我再使用冗余;
有没有哪位大神先正面回答下这个问题啊?

lrj1596的主页 lrj1596 | 初学一级 | 园豆:22
提问于:2019-08-21 11:09
< >
分享
最佳答案
0

还是不甘心,结果真让我找到了答案,U+20000位置上的字是——“𠀀”,读作(hē),基本同“呵”;
方法是——用word,打一个“20000”,选中,Alt+x,出现!
但是,当我把它copy进oracle库的时候,居然不能粘贴进去╮(╯╰)╭
故,不能做决定性验证!╮(╯
╰)╭
不过,既然存在这个“𠀀”,同时它对应的Unicode编码又是U+20000,
那么基本上可以较有把握地猜测最初的问题的答案了——
有3,也有4;
(但是,我觉得,常用的99.9%都是3,而4的那些应该是几乎没人用)
---------------------------------------------
至于 午夜与鬼共舞丶 所说的那些,
因为没有找到可供验证的关键依据;
(我是没找到,他人又不知道跑哪去了,他说的那个百度经验的查字符映射表的方法,
我本地只能找到4位的Unicode编码的字符,根本无法输入“20000”这个5位的Unicode码)
so,这里我就只能将其答案列在其它回答里了;
如果他能找到一个官方出具的说明文件,比如他的答案中的“字符映射表 - 汉语”,
那就算完美解决这个问题了。

lrj1596 | 初学一级 |园豆:22 | 2019-08-21 14:14
其他回答(1)
0

utf-8 中的一个汉字占几个字节
占 2 个字节的:〇

占 3 个字节的:基本等同于 GBK,含 21000 多个汉字

占 4 个字节的:中日韩超大字符集里面的汉字,有 5 万多个

1 个 utf8 数字占 1 个字节

1 个 utf8 英文字母占 1 个字节

在查找 UTF-8 编码资料时发现,很多的帖子说的 UTF-8 编码里,一个汉字占用3个字节,

有的还做了个证明,大概是这样的,创建一个没有 BOM 的 UTF-8 编码的文本文件,

里面保存了几个汉字,然后查看文件的大小。我觉得这样的证明没有一点说服力,

因为 UTF-8 是变长的,1-6 个字节,少量的汉字检测不能说明所有的汉字都是的。

后来我又查看了字符映射表-汉语,找到了正确的答案:

少数是汉字每个占用 3 个字节,多数占用 4 个字节。

占用 3 个字节的范围

U+2E80 - U+2EF3 : 0xE2 0xBA 0x80 - 0xE2 0xBB 0xB3 共 115 个

U+2F00 - U+2FD5 : 0xE2 0xBC 0x80 - 0xE2 0xBF 0x95 共 213 个

U+3005 - U+3029 : 0xE3 0x80 0x85 - 0xE3 0x80 0xA9 共 36 个

U+3038 - U+4DB5 : 0xE3 0x80 0xB8 - 0xE4 0xB6 0xB5 共 7549 个

U+4E00 - U+FA6A : 0xE4 0xB8 0x80 - 0xEF 0xA9 0xAA 共 44138 个

U+FA70 - U+FAD9 : 0xEF 0xA9 0xB0 - 0xEF 0xAB 0x99 共 105 个

合计: 52156 个

占用 4 个字节的范围

U+20000 - U+2FA1D : 0xF0 0xA0 0x80 0x80 - 0xF0 0xAF 0xA8 0x9D 共 64029 个

合计: 64029 个

午夜与鬼共舞丶 | 园豆:134 (初学一级) | 2019-08-21 14:16

这个“字符映射表-汉语”,在哪里可以看到?是官方出具的吗???可以提供一个链接吗?

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 14:51

@lrj1596: https://jingyan.baidu.com/article/91f5db1b7474471c7e05e37a.html

支持(0) 反对(0) 午夜与鬼共舞丶 | 园豆:134 (初学一级) | 2019-08-21 14:59

纠正下一。UTF8 长度范围是1-4字节

支持(0) 反对(0) Shendu.CC | 园豆:2138 (老鸟四级) | 2019-08-21 15:04

@午夜与鬼共舞丶: 这个字符映射表就是你文中的“字符映射表-汉语”?
这里面你能搜到U+20000?那U+20000是什么字啊?

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 15:16

@Shendu.CC: 有在线的“字符映射表 - 汉语”吗?链接地址发一个哈~

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 15:19

@午夜与鬼共舞丶: 或者你说下,怎么找也行,选什么字体(跟字体有关吗?不懂)?要不要点击高级查看?然后字符集选哪个?(是繁体中文?简体中文?日语?韩语?)直接用转到Unicode好像最多只能输入4位啊~~

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 15:31

@Shendu.CC: 人跑哪去了?把问题说完下嘛~~~

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 17:23

@午夜与鬼共舞丶: 人跑哪去了?把问题说完下嘛~~~

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 17:24

@lrj1596: 别急,等下。

支持(0) 反对(0) Shendu.CC | 园豆:2138 (老鸟四级) | 2019-08-21 17:24

@Shendu.CC: 大哥,我已经下班了................

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 18:32

@午夜与鬼共舞丶: 大哥,我已经下班了................

支持(0) 反对(0) lrj1596 | 园豆:22 (初学一级) | 2019-08-21 18:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册