MYSQL varchar和nvarchar一些学习


背景

先试用 utfmb3的格式进行一下简单验证

注意脚本都是一样的. 

create database  zhaobsh ;
use zhaobsh ;
create table zhaobsh (zhaobshvarchar varchar(30),zhaobshnvarchar nvarchar(30)) ;
insert into zhaobsh values ('123abc','123abc') ;
insert into zhaobsh values ('abcd赵1234','abcd赵1234') ;
insert into zhaobsh values ('abcde한국12345','abcde한국12345') ;
insert into zhaobsh values ('abcde한국12345',N'abcde한국12345') ;

winhex的显示结果

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00010090            31 32 33 61 62  63 31 32 33 61 62 63 0B      123abc123abc
000100A0 0B 00 00 00 18 00 31 00 00 00 02 D0 C4 00 00 00 1 心
000100B0 3C A8 0E 81 00 00 0E A2 01 10 61 62 63 64 E8 B5 <? ? abcd璧
000100C0 B5 31 32 33 34 61 62 63 64 E8 B5 B5 31 32 33 34 ?234abcd璧?234
000100D0 10 10 00 00 00 20 00 3B 00 00 00 02 D0 C5 00 00 ; 信
000100E0 00 3C A8 13 82 00 00 02 D6 01 10 61 62 63 64 65 <?? ? abcde
000100F0 ED 95 9C EA B5 AD 31 32 33 34 35 61 62 63 64 65 頃滉淡12345abcde
00010100 ED 95 9C EA B5 AD 31 32 33 34 35 10 10 00 00 00 頃滉淡12345
00010110 28 FF 5D 00 00 00 02 D0 C6 00 00 00 3C A8 14 81 (] 衅 <?
00010120 00 00 00 8B 01 10 61 62 63 64 65 ED 95 9C EA B5 ? abcde頃滉?
00010130 AD 31 32 33 34 35 61 62 63 64 65 ED 95 9C EA B5 ?2345abcde頃滉?
00010140 AD 31 32 33 34 35 ?2345 需要注意 全新的一个数据库就见了一个表 会产生一个ibd文件
ibd文件大小为 112KB 这个存储的位置在 76页/136页
存储的位置也比较奇怪.

MySQL的结果分析

1. 关于ASCII字符集
MySQL采用 utf8mb3的字符集时
不管是 varchar和nvarchar, 其实存储ASCII的编码 使用的位置和大小是完全一样的:
31 32 33 61 62 63 31 32 33 61 62 63
不会因为是 nvarchar 就浪费空间. 跟SQLServer的处理方式不一样. 2. 关于中文汉字
61 62 63 64 E8 B5 B5 31 32 33 34 61 62 63 64 E8 B5 B5 31 32 33 34 因为 赵的 UTF8的编码为:
赵 Unicode (UTF-8) utf-8 E8B5B5
这一点与SQLServer的存储页面是不一样的. SQLServer存储的是 unicode的具体数值:
赵 Unicode utf-16 758D 3. 关于韩文:
61 62 63 64 65 ED 95 9C EA B5 AD 31 32 33 34 35 61 62 63 64 65 ED 95 9C EA B5 AD 31 32 33 34 35 可以看到 韩文的
한국 Unicode (UTF-8) utf-8 ED959CEAB5AD varchar 和 nvarchar的存储其实是完全一样的.

结论

MySQL的 nvarchar其实就是掩人耳目的
MySQL的nvarchar 其实就是 varchar的完全一样的一个别名 这一点PG数据库比较有操守, 觉得没必要有 nvarchar 就没有实现. SQLServer的国际化其实比 utf8字符集还要早
而且是一个很重视商业和向前兼容的数据库.
所以sqlserver的表现与PG和MySQL其实完全不一样.
SQLServer接纳utf8也很慢也非常晚. 下一步需要验证一下 信创数据库的varchar和nvarchar的相关信息了.

MYSQL varchar和nvarchar一些学习的更多相关文章

  1. MySQL中char、varchar和nvarchar的区别

    一.char和varchar的区别char是固定长度的,而varchar会根据具体的长度来使用存储空间,另外varchar需要用额外的1-2个字节存储字符串长度.1). 当字符串长度小于255时,用额 ...

  2. sql-char和varchar,nvarchar的区别

    数据类型的比较 char表示的是固定长度,最长n个字 varchar表示的是实际长度的数据类型 比如:如果是char类型,当你输入字符小于长度时,后补空格:而是varchar类型时,则表示你输入字符的 ...

  3. MySQL基础之事务编程学习笔记

    MySQL基础之事务编程学习笔记 在学习<MySQL技术内幕:SQL编程>一书,并做了笔记.本博客内容是自己学了<MySQL技术内幕:SQL编程>事务编程一章之后,根据自己的理 ...

  4. 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)

    背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...

  5. sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  6. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

    http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...

  7. varchar(n),nvarchar(n) 长度、性能、及所占空间的说明

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  8. varchar和Nvarchar区别

    http://www.cnblogs.com/yelaiju/archive/2010/05/29/1746826.html Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字 ...

  9. [转]varchar(n),nvarchar(n) 长度、性能、及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  10. varchar与nvarchar的区别

    nvarchar可变长度的Unicode字符数据 varchar可变长度且非 Unicode 的字符数据 举例: varchar(1)   --可以插进入一个数字或者一个字母,如果要插入一个汉字改为v ...

随机推荐

  1. k8s~动态生成pvc和pv

    有时,我们不想手动建立pv和pvc,这时,我们可以通过strongClass存储类来帮我们实现,动态建立pvc,并动态为它分配pv存储空间,我们以nfs为例,说一下动态分配在nfs存储截至上建立pv的 ...

  2. Unix IPC

    本文主要是摘抄 APUE 中 IPC 部分的内容 IPC(Inter Process Communication)进程间通信,是指在进程之间进行通信的一种方式,本文将简要介绍一下在 Unix 中存在的 ...

  3. 记录:websoket切换页面后重复执行问题

    问题描述 因为项目需求,实时播放执行信息.而项目的websoket只在这个页面,会有切换情况.从websoket连接得到执行列表数据.断开重连后会传递新连接数据+旧连接数据.也就是说,如果第一次进入页 ...

  4. GaussDB技术解读系列:高级压缩之OLTP表压缩

    本文分享自华为云社区<DTCC 2023专家解读 | GaussDB技术解读系列:高级压缩之OLTP表压缩>,作者:GaussDB 数据库 . 8月16日,第14届中国数据库技术大会(DT ...

  5. 游戏“外挂”?—— AI生成游戏最强攻略

    作为一名快乐的肥宅,玩游戏是居家必备,无论是王者荣耀.吃鸡.原神这些大热游戏,还是跳一跳.合成大西瓜.2048.这些风靡一时得小游戏,咱都有涉及.但是为了成为一个"头号玩家",我总 ...

  6. CIO们开始将软件供应链升级为安全优先级top

    开源之所以在软件开发中大量使用的原因是它提供了经过良好测试的构建块,可以加速复杂应用程序和服务的创建.但是第三方软件组件以及包和容器的便利性同时也带来了风险--软件供应链攻击. 软件供应链攻击日益普遍 ...

  7. OpenSSL 升级、回滚

    ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with ...

  8. LSP 网络劫持(Layered Service Provider Hijacking)

    LSP 简介: 分层服务提供商(Layered Service Provider,LSP)是一种可以扩展Winsock作为应用程序的 Windows 的网络套接字工具的机制.Winsock LSP 可 ...

  9. Flutter如何有效地退出程序

    今天博主来谈一个开发Flutter App的小技巧--怎样有效地退出程序. 这种方法典型的应用场景就是用户许可协议的同意与否.从用户的角度讲,虽然大部分人都会无脑点击"同意",但我 ...

  10. 【docker】运维相关名词 Iaas-Paas和Saas docker镜像设置 启动与停止常用命令 镜像相关命令 容器相关命令

    目录 上节回顾 今日内容 1 什么是Iaas-Paas和Saas 2 docker 启动设置镜像 2.1 启动与停止常用命令 3 镜像相关命令 4 容器相关命令 练习 上节回顾 # 1 flask-s ...