MYSQL varchar和nvarchar一些学习
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一些学习的更多相关文章
- MySQL中char、varchar和nvarchar的区别
一.char和varchar的区别char是固定长度的,而varchar会根据具体的长度来使用存储空间,另外varchar需要用额外的1-2个字节存储字符串长度.1). 当字符串长度小于255时,用额 ...
- sql-char和varchar,nvarchar的区别
数据类型的比较 char表示的是固定长度,最长n个字 varchar表示的是实际长度的数据类型 比如:如果是char类型,当你输入字符小于长度时,后补空格:而是varchar类型时,则表示你输入字符的 ...
- MySQL基础之事务编程学习笔记
MySQL基础之事务编程学习笔记 在学习<MySQL技术内幕:SQL编程>一书,并做了笔记.本博客内容是自己学了<MySQL技术内幕:SQL编程>事务编程一章之后,根据自己的理 ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...
- sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...
- varchar(n),nvarchar(n) 长度、性能、及所占空间的说明
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- varchar和Nvarchar区别
http://www.cnblogs.com/yelaiju/archive/2010/05/29/1746826.html Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字 ...
- [转]varchar(n),nvarchar(n) 长度、性能、及所占空间分析
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- varchar与nvarchar的区别
nvarchar可变长度的Unicode字符数据 varchar可变长度且非 Unicode 的字符数据 举例: varchar(1) --可以插进入一个数字或者一个字母,如果要插入一个汉字改为v ...
随机推荐
- 聊聊ChatGLM6B的微调脚本及与Huggingface的关联
本文首先分析微调脚本trainer.sh的内容,再剖析ChatGLM是如何与Huggingface平台对接,实现transformers库的API直接调用ChatGLM模型,最后定位到了ChatGLM ...
- 基于Docker 部署 Seafile+OnlyOffice+Wiki插件
原文:基于 Docker 部署 SeafilePro + OnlyOffice(CentOS版) 官方文档:用 Docker 部署 Seafile 服务 CentOS 服务器 基于 Docker 部署 ...
- Windows Server 2012 R2 无法更新问题
Windows Server 2012 R2 无法更新问题 新安装的ISO镜像由于年久失修,原先的Update服务器可能已经失效,需要安装更新补丁,才可以正常指向新的更新服务器,甚至连系统激活(输入正 ...
- 如何找到 niche 出海细分市场的 IDEA
先说结论就是:看榜单 Why:为什么看榜单? 大家会问为什么?原因很简单: 熟读唐诗三百首,不会作诗也会吟 不天天看榜单上相关的优秀同行,你想干啥 心法就是下苦功夫坚持,量变引起质变,排行榜天天看 竞 ...
- ZincSearch轻量级全文搜索引擎入门到
ZincSearch轻量级全文搜索引擎入门到 Zinc是一个用于对文档进行全文搜索的搜索引擎.它是开源的,内置在 Go 中.Zinc不是从头开始构建索引引擎,而是构建在 bluge 之上,这是一个出色 ...
- C++ 学习宝藏网站分享
C++ 学习宝藏网站分享 1. C++ 在线参考手册 Cppreference https://zh.cppreference.com C++ 开发者必备的在线参考手册,是我最常访问的 C++ 网站之 ...
- Windows下编译并使用64位GMP
目录 1. 概述 2. 编译 2.1. GCC环境 2.2. 编译过程 3. 使用 3.1. 调用 3.2. 示例 4. 参考 1. 概述 GMP是一个开源的数学运算库,它可以用于任意精度的数学运算, ...
- 华为云云容器引擎CCE产品文档带来4个升级,降低使用难度
本文分享自华为云社区<华为云云容器引擎CCE产品文档优化升级!>,作者: 云容器大未来 . 云原生产品技术栈庞大,需要用户对容器.Kubernetes等核心技术都有扎实的理解和掌握:同时问 ...
- Axure 标记元件
快照:可以用来表示控件的截图功能 箭头:有了连线,基本很少用它 便签:相关于便利贴,写些说明.备注, 标记:标记好数字,对应数字的标记做解释说明
- Nacos 1.2.1 集群搭建(一)环境准备
虚机准备.Nacos 文件准备.MySQL 5.7 安装 https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html 根据官网要求,至少3个节点 ...