一、Oracle数据库存储中文字符

Oracle数据库可以以字节或者字符来存储字符串的,一般来说默认是存储字节,你可以查看数据库NLS_LENGTH_SEMANTICS的值。

可以看到Oracle数据库,默认以字节形式存储字符串。

当以默认形式,即以字节为单位存储字符串的时候,建表语句中char或varchar2只用传入长度即可,不用输byte

例如:

CREATE TABLE varchar2_test(name varchar2(3),id number);
INSERT INTO varchar2_test(name,id)VALUES('小蜜蜂',1);
COMMIT;

根据建表语句,name字段可以存储3个字节空间的字符串,根据不同的编码格式,存储的字符串有差异,具体如下

一个汉字占多少长度与编码有关:

  • UTF-8:一个汉字 = 3个字节,英文一个字母占用一个字节
  • GBK: 一个汉字 = 2个字节,英文一个字母占用一个字节

所以这里的name字段,只能存储一个汉字,但是插入了name字段的值为3个汉字,这里数据库在插入数据时会报错。

提示name字段最大是3字节,但是实际上存储了9字节,这就是因为数据库服务器的编码用的al32utf-8,一个汉字占用3个字节。

如果想要建表时候,里面传入的长度就是具体的字符个数,可以这样写:

CREATE TABLE varchar2_test2(name varchar2(3 CHAR),id number);
insert into varchar2_test2(name,id)values('小蜜蜂',1);

这就表示name字段可以传入3个字符串(中英文3个字符串)

现在这条插入语句,就不会报错了

同样这也适用char类型或varchar类型的数据类型。

下边用查询语句分别查询一下字段长度:

可以使用lengthb查看字符占用的字节长度

可以用length查看字符长度

可以使用vsize查询存储中文字符需要的字节空间

下边来修改数据库编码格式为gbk

具体操作步骤如下:

详细步骤,可以参考:oracle查看编码以及修改编码

现在查询一下编码:

发现已经修改成了ZHS16GBK

现在再查询一下,GBK编码下,中文字符所占字节

可以看到‘你’占用2个字节

存储‘小蜜蜂’需要6个字节空间

演示完毕,现在再改回原来的AL32UTF8编码格式

将上边的过程再操作一遍,改回原来的编码格式,然后再查询

二、MySQL存储中文字符

4.0版本以下,varchar(10),默认是以字节存储,表示可以存储10个字节的字符串。

5.0版本以上,varchar(10),指的是可以存储的字符数。5.0版本及以上,默认是以字符存储。

电脑上安装的是5.x版本,下边以这个版本(5.7.12)为演示数据库

查询一下mysql数据库的编码格式:

创建数据表:

show databases;
use test1;
create table varchar_test(name varchar(5),id int primary key auto_increment);
insert into varchar_test(name,id) values('小蜜蜂是个初级程序');

运行插入语句,发现会报错,建表的时候,name字段最大可以输入5个字符,但是插入语句中name字段赋值了9个字符,提示数据太长

现在修改一下:

现在可以成功插入数据了

接下来查询一下中文字符长度和占用的字节:

因为使用的是utf-8编码,中文字符占用3个字节,所以name=‘小蜜蜂是个’占用15个字节

而字符长度是5

接下来再测试一下数字型字符串

可以看到一个单个的数字字符也是占用一个字节,和英文字母一样

注意事项:

关于utf8mb4

在MySql 5.5 之前,UTF8 编码最多支持3个字节,只支持BMP部分的unicode编码区,BMP是从哪到哪?戳这里 基本就是 0000 ~ FFFF 这一区。

从MySQL 5.5 开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。
utf8mb4 is a superset of utf8

tf8mb4兼容utf8,且比utf8能表示更多的字符。

至于什么时候用,看你做的什么项目了。。。
在做移动应用时,会遇到ios用户在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。

MySQL数据库与Oracle数据库在存储中文字符以字节或字符存储的区别相关推荐

  1. MySQL数据库和Oracle数据库的区别

    由于SQL Server不常用,所以这里只针对MySQL数据库和Oracle数据库的区别 (1) 对事务的提交 MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写com ...

  2. mysql数据库,oracle数据库中对字段的拼接方法

    mysql数据库,oracle数据库中对字段的拼接方法 1.简介 在日常开发中,常常有将多个字段拼接进行sql操作的场景,比如做模糊查询,我这里分两种环境阐述:1.在数据库中的写法:2.在mybati ...

  3. oracle数据库系统介绍,Oracle数据库(Oracle Database)体系结构及基本组成介绍

    Oracle数据库服务器(Oracle database server)一般情况下是一个Oracle instance和一个Oracle database组成.当在计算机服务器上启动Oracle数据库 ...

  4. 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法

    sm_appmenuitem 这个演示表有 5 个索引. 我在不知道的情况下想知道这个表的索引有没有建成功,或者说我现在想知道这个表的索引有哪些,就要来查询了. 索引表查询方法如下,把对应的表放到括号 ...

  5. oracle中如何加字母,Oracle数据库之oracle数据库表插入数据的时候如何产生一个字母+数字...

    本文主要向大家介绍了Oracle数据库之oracle数据库表插入数据的时候如何产生一个字母+数字,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle 语句中" ...

  6. 关于oracle数据库论文,Oracle数据库研究论文 有关Oracle数据库的论文

    Oracle数据库优化研究 摘要:Oracle数据库系统的优化对于整个系统的正常运行起着至关重要的作用,但是它却是一项非常复杂的工作.Oracle数据库性能调整与优化涉及到多个层面,并且可以提高Ora ...

  7. MySQL数据库与Oracle数据库中建表使用单引号和双引号的效果

    一.Oracle数据库,使用单引号和双引号,以及不使用引号的区别 1.不使用引号,创建一个新表 -- 如果不使用引号,则表名和字段会自动转换成大写 create table Tatoo_Test(Na ...

  8. Robot Framework操作MySQL数据库和Oracle数据库

    一.Robot Framework连接MySQL数据库 1.安装databaselibrary.pymsql 通过cmd命令执行pip install robotframework-databasel ...

  9. mysql换成oracle_从mysql转换到oracle数据库

    最近做了几个项目,我对项目的要求(有些也是客户的要求)都是既要能用mysql数据库,又要能用oracle数据库,开发时尽量用mysql,等到发布时要求两者都能适应.因为两种数据库还是许多具体的应用有些 ...

最新文章

  1. mapreduce中设置自定义的输入类,进行文本解析(默认以tab键为分隔符)
  2. 最实用的机器学习算法优缺点分析,没有比这篇说得更好了
  3. 独立成分分析ICA、因子分析、LDA降维、NMF非负矩阵分解
  4. 学计算机打字一段话,初学电脑基础知识打字
  5. python 装饰器 参数-[Python]写个带参数的装饰器
  6. main_loop()函数解析(1)
  7. 【学习笔记】11、循环语句—while
  8. 语言学概论ppt课件_精益生产管理培训PPT课件-精益生产管理概论
  9. java 信使服务_java – 自行车信使/ TSPPD与OptaPlanner
  10. linux启动盘制作工具_开源免费的国产多系统启动盘制作工具:Ventoy
  11. ipsec ***之配置详解篇
  12. 使用Cmder替换cmd,让你的开发飞起来
  13. Java技术栈学习路线(不喜勿喷)
  14. Android 仿微信回复评论点赞效果
  15. python 视频播放 拖动_python + opencv鼠标拖动视频区域裁剪
  16. ARM 编译工具链详解
  17. Android中点击链接调起App
  18. SpringCloudGateway路由定义存至Mysql数据库
  19. 【Flutter -- 基础组件】Flutter 导航栏
  20. Innovus/Encounter Floorplan命令合集(二)

热门文章

  1. 如何在Python中打印异常?
  2. 是否进行“ git导出”(如“ svn导出”)?
  3. VMWare:打开虚拟机黑屏
  4. C语言随笔小算法:单项链表如何实现队列
  5. python网站设计中接口的作用_python接口自动化(三)--如何设计接口测试用例(详解)...
  6. python导入dat数据_Kaggle影评数据集,Python数据分析小例子14
  7. ❤️《大前端—模块化》
  8. 清除浮动-父级添加overflow(HTML、CSS)
  9. 实验4-1-8 求给定精度的简单交错序列部分和 (15 分)
  10. 【CSS】Table样式