美文网首页持久层
mysql中的设置varchar长度问题

mysql中的设置varchar长度问题

作者: 一步之遥_zzz | 来源:发表于2017-11-06 14:24 被阅读1443次

一般来说:

完全确定长度的,如邮编、股票代码、手机号码号段(前3位或前7位)、等等,可以用char。除此之外都用varchar。

即,char类型用来表示各种已知定义的code,而varchar类型用来表示各种string。

varchar的长度,最好是在够用(需要适当预测未来需求)且方便管理的前提下尽可能短。因为SQLServer的最大索引键是900字节,在一个varchar(1000)或两个varchar(500)的字段上建索引,可能会导致数据异常。严格约束长度,则能避免这种可能性。

另外,同一个字段,在整个系统中应该保证数据类型(包括长度)一致和字段名尽量一致。比如一个EmployeeID,在所有包含该字段的表中都应该是同样的varchar(30),并且名称都应该尽量是EmployeeID,除非是ManagerID、OwnerEmployeeID这种表示其它含义的情况。这样可以最大限度避免混淆,方便管理。

至于非英文字符,是选择nchar/nvarchar还是char/varchar主要看个人倾向和系统集成的需求。只是要知道一点,用varchar+代码页的机制存储中文字符(DBCS),可能会遇到许多意想不到的麻烦。




如果某一项中设置的是varchar(50)

那么对英文当然是50

那么对中文呢

utf-8的中文占3个字节

那么,这个varchar(50)是不是只能存16个汉字了?

mysql varchar(50) 不管中文 还是英文 都是存50个的

MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,最大有效长度是65,532字节)。

为何会这般变换?真是感觉MySQL的手册做的太不友好了,因为你要仔细的继续往下读才会发现这段描述:MySQL 5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。

好了,貌似懂了一点。但具体他说的长度大于255时使用2个字节长度前缀,小学减法题:65535 - 2 = 65533啊。不知道这些大牛如何计算的,暂且保留疑问吧?

注:我测试了一下使用UTF8编码,varchar的最大长度为21854字节。

在mysql 5.0.45版本,数据库编码utf8下进行测试:varchar最长定义为21785。也就是说不论字母、数字、汉字,只能放21785个。

推想:varchar字节最大65535,utf8编码一个字符3个字节65535/3=21785。

相关文章

  • mysql中的设置varchar长度问题

    一般来说: 完全确定长度的,如邮编、股票代码、手机号码号段(前3位或前7位)、等等,可以用char。除此之外都用v...

  • MySql中varchar长度的设置问题

    根据自己多年的工作经验,特别是在接收旧的项目时,varcahr的长度设置有不同的风格,针对varchar长度的设置...

  • Mysql varchar 长度问题

    今天看了实习生的建表语句,里面有很多字段都是varchar(255),觉得很奇怪便提了一句了,实习生:“因为mys...

  • Mysql中varchar类型长度问题

    今天在设计一个简单,但是value值可能会很长的数据库表时;考虑到varchar类型长度问题。遇到了一个有意思的问...

  • mysql练习题3

    **问题:**MySQL中的varchar和char有什么区别? 有三种区别:长度,效率,存储 1.长度 char...

  • 2020-08-06 数据蛙第十期题目mysql部分

    Mysql 基础 1、Mysql中字段char、varchar的区别 char:长度固定,char(10), 存入...

  • mysql日常使用

    大纲: 一. mysql 数据类型 注意点: char和varchar使用char长度不可变,varchar长度可...

  • mysql 中varchar的长度设定

    最近在工作中遇到一个问题,项目中数据库的一个字段设定的长度要被用尽了,需要调整.这个字段是varchar类型的.于...

  • Mysql char varchar text

    1.varchar类型的变化 MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其...

  • MySQL sql_mode设置

    MySQL sql_mode设置 问题: 修改varchar类型的paidTime为日期类型的时候 update ...

网友评论

    本文标题:mysql中的设置varchar长度问题

    本文链接:https://www.haomeiwen.com/subject/ozrlmxtx.html