Oracle - 全角和半角
全角和半角
只有字符,数字,标点符号有全角和半角的区别,中文没有
普通写一句英文(即不要输入法):I am 28 years old, do you love me?
采用半角写:I am 28 years old, do you love me?
采用全角写:I am 28 years old,do you love me?
可以看到数字,字符,标点符号都变了样子
而输入一段中文
采用半角写:我爱你,祖国。
采用全角写:我爱你,祖国。
可以看到,对于中文来讲,不管是汉字还是标点符号,都是全角的形式。
oracle数据库中有两个函数
to_single_byte(), 将全角转为半角
to_multi_byte(), 将半角转为全角
实验一:
create table test1(id number, name varchar2(20));
insert into test1 values(1,'中国你好,我爱你');
insert into test1 values(2,'中国你好,我爱你');
insert into test1 values(3,'中国你好,我爱你');
insert into test1 values(4,'中国你好');
insert into test1 values(5,'中国你好123@$');
commit;
select id,name,dump(name,1016),dump(to_single_byte(name),1016) from test1;
1 中国你好,我爱你 Typ=1 Len=16 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,a3,ac,ce,d2,b0,ae,c4,e3 Typ=1 Len=15 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,2c,ce,d2,b0,ae,c4,e3 中国你好,我爱你
2 中国你好,我爱你 Typ=1 Len=16 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,a3,ac,ce,d2,b0,ae,c4,e3 Typ=1 Len=15 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,2c,ce,d2,b0,ae,c4,e3 中国你好,我爱你
3 中国你好,我爱你 Typ=1 Len=15 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,2c,ce,d2,b0,ae,c4,e3 Typ=1 Len=15 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,2c,ce,d2,b0,ae,c4,e3 中国你好,我爱你
4 中国你好 Typ=1 Len=8 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3 Typ=1 Len=8 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3 中国你好
5 中国你好123@$ Typ=1 Len=18 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,a3,b1,a3,b2,a3,b3,a3,c0,a1,e7 Typ=1 Len=14 CharacterSet=ZHS16GBK: d6,d0,b9,fa,c4,e3,ba,c3,31,32,33,40,a1,e7 中国你好123@$

用varchar2存的字符串,全角可以转为半角,半角也可以转为全角(这里我就不贴出来了)
实验二:
create table test(id number, name nvarchar2(20));
insert into test values(1,'中国你好,我爱你');
insert into test values(2,'中国你好,我爱你');
insert into test values(3,'中国你好,我爱你');
insert into test values(4,'中国你好');
insert into test values(5,'中国你好123@$');
select id,name,dump(name,1016),dump(to_single_byte(name),1016),to_single_byte(name) from test;
ID NAME DUMP(NAME,1016) DUMP(TO_SINGLE_BYTE(NAME),1016 TO_SINGLE_BYTE(NAME)
1 中国你好,我爱你 Typ=1 Len=16 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,ff,c,62,11,72,31,4f,60 Typ=1 Len=17 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,ff,c,62,11,72,31,4f,60, 中国你好,我爱你
2 中国你好,我爱你 Typ=1 Len=16 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,ff,c,62,11,72,31,4f,60 Typ=1 Len=17 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,ff,c,62,11,72,31,4f,60, 中国你好,我爱你
3 中国你好,我爱你 Typ=1 Len=16 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,0,2c,62,11,72,31,4f,60 Typ=1 Len=17 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,0,2c,62,11,72,31,4f,60, 中国你好,我爱你
4 中国你好 Typ=1 Len=8 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d Typ=1 Len=9 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d, 中国你好
5 中国你好123@$ Typ=1 Len=18 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,ff,11,ff,12,ff,13,ff,20,ff,4 Typ=1 Len=19 CharacterSet=AL16UTF16: 4e,2d,56,fd,4f,60,59,7d,ff,11,ff,12,ff,13,ff,20,ff,4, 中国你好123@$
可以看到使用了to_single_byte函数好像没什么改变,显示出来的东西都是一样,但是在末尾添了个0
用select * from test where to_single_byte(name)='中国你好,我爱你',却查不到任何结果。这里特别需要小心,使用了to_single_byte函数,显示出来的结果,跟它实际的编码是不一样的。
这里需要使用select * from test where to_single_byte(to_char(name))='中国你好,我爱你',to_char这里将name字段的nvarchar转化为varchar
总结:
建议大家在使用字符串时,不管中文英文最好使用varchar2,nvarchar的确有很多坑。(备注:我的实验是在11.2.0.4做出来的,有朋友说12c不存在后面添加0的现象,可能是11g的一个小bug)
后记:
有时候如果应用报错ORA-29275: partial multibyte character,可以根据这个思路来
Oracle - 全角和半角的更多相关文章
- Oracle全角和半角处理函数
1.TO_MULTI_BYTE语法: TO_MULTI_BYTE(String) 功能: 计算所有单字节字符都替换为等价的多字节字符的String.该函数只有当数据库字符集同时包含多字节和单字节的字符 ...
- Java全角、半角字符的关系以及转换
如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...
- C#全角和半角转换
在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角".在汉字输入时,系统提供&quo ...
- 用perl对字符串进行全角转半角操作
#全角转半角 #ljl use Encode; sub CheckSBC { my ($name)=@_; my @character; my $tmpname=$name; my $headname ...
- java 全角、半角字符串转换
转自:http://www.cnblogs.com/modou/articles/2679815.html 加入了空字符串的验证 半角转全角的方法: /** * @Title: ToSBC * ...
- 全角和半角相互转换(C语言实现)
目前,我们接触的汉字编码主要包括GBK和GB2312.其中,GB2312又称国标码,它是一个简化字的编码规范,也包括其他的符号.字母.日文假名等,共7445个图形字符,其中汉字占6763个.我们平时说 ...
- MySQL 全角转换为半角
序言: 用户注冊时候,录入了全角手机号码,所以导致短信系统依据手机字段发送短信失败.如今问题来了,怎样把全角手机号码变成半角手机号码? 1.手机号码全角转换成半角先查询出来全角半角都存在 ...
- word中利用宏替换标点标点全角与半角
Alt+F11,然后插入-模块: 复制下面代码到编辑窗口: Sub 半角标点符号转换为全角标点符号() '中英互译文档中将中文段落中的英文标点符号替换为中文标点符号 Dim i As Paragrap ...
- 刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK、GB18030、GB13000)以及全角、半角、CJK
简体汉字编码方案(GB2312.GBK.GB18030.GB13000)以及全角.半角.CJK 一.概述 1. 英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够 ...
随机推荐
- nginx入门二
反向代理: proxy_pass server { listen 80; location /n { proxy_pass http://127.0.0.1:8000/test; } location ...
- How to scroll down with Phantomjs to load dynamic content
page.open('http://example.com/?q=houston', function () { // Checks for bottom div and scrolls down f ...
- P3567 [POI2014]KUR-Couriers
题目描述 Byteasar works for the BAJ company, which sells computer games. The BAJ company cooperates with ...
- Log4Net 无法写入到SqlServer
直接进入正题: 今天在测试使用Log4Net写入到数据库的时候,发现一直无法写入到数据库中,而且程式也没有报任何错误. 配置信息如下: <appender name="AdoNetAp ...
- Python-JS中的事件详解
目录 fdf!! fefd 一.JS中的事件二.JS中的事件分类: 1.事件初级: 2.事件参数 Event 3.鼠标事件 4.键盘事件 *** 5.表单事件 *** 6.文档事件 * 7.图片事件 ...
- PYTHON-面向对象 类 绑定方法
面向对象三大特性(*****) 1继承 1. 什么是继承 继承是一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类/基类/超类 继承与现实生活中的继承一个意思 (例如 小明继承小明他爹 ...
- 目标检测--Scalable Object Detection using Deep Neural Networks(CVPR 2014)
Scalable Object Detection using Deep Neural Networks 作者: Dumitru Erhan, Christian Szegedy, Alexander ...
- 转:MySQL如何修改密码
转:https://www.cnblogs.com/yang82/p/7794712.html. 第一种方式: 最简单的方法就是借助第三方工具Navicat for MySQL来修改,方法如下: 1. ...
- windows10+mysql8.0.11zip安装
准备: MySQL8.0 Windows zip包下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 环境: ...
- Innodb引擎下mysql自身配置优化
1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...