固定长度的非Unicode字符数据,最大长度8000个字符。例:char(8) 输入的字符小于8时,后面用空格补齐,输入的字符大于8时,截取前8个字符。
可变长度的非Unicode字符数据,最大长度8000个字符。例:varchar(8) 存储的字符实际上就是你所输入的字符。但要在总长度上加1字符,用来记录其字节的长度。
可变长度的Unicode字符数据,最大长度4000个字符。字节的存储大小是所输入字符个数的两倍。
char的存储速率比varchar要高,因为varchar要去计算输入字符的长度。但是空间的利用率上varchar要比char更好。
我们知道Unicode编码对英文和中文字符都是用两个字节表示,nvarchar一般用来存储中文 ,存储英文的时候数量上会有所损失。
建议纯英文和数字用char/varchar,有中文使用nvarchar。
对于 MyISAM 存储引擎的表,尽量使用 char ,对于经常需要修改而形成碎片的myisam数据表更是如此,它的缺点是占用磁盘空间。
对于 InnoDB 存储引擎的表,尽量使用 varchar ,因为它的数据存储格式对固定长度的格式和可变长度的格式不加以区分,所以char会比varchar占用更多存储空间,从减少空间占用和磁盘I/O角度看,使用varchar更好。
关于varchar还有一个问题,varchar可以自适应存储空间,那varchar(20)和varchar(1000)存储都是一样的,那每次设计越大就好,免得以后不够用,这个观点是错的,因为mysql会把表信息放进内存中(查询第一次后就缓存了),这时内存的申请是按照固定长度来的,varchar很大,申请的内存也会越大,所以还是按需设值。
1、 存储很短的信息的时候应该用char,例如门牌号:104,因为varchar还会再多一个字节记录长度。
2、 频繁改变的字段应该用char,因为每次修改varchar都会重新计算长度,而这些char不用。
3、 大数据量(多行)提取时varchar的磁盘I/O消耗更低,意味着varchar在综合查询性能上比char更好。
4、 存储数据有中文时,有用nvarchar。
1.varchar转int
函数:cast
用法:cast(字段 as SIGNED INTEGER)
或者cast(字段 as UNSIGNED INTEGER))
例如:SELECT CAST(DATE_FORMAT(NOW(),"%Y%m%d") as SIGNED INTEGER)
2.varchar转date
函数:str_to_date(字段,字符串格式)
用法:select str_to_date(字段,'%Y-%m-%d') from tablea limit 100;
根据日期进行选取
选取日期大于2019年的所有字段
例如:select * from tablea where str_to_date(tablea.日期,'%Y-%m-%d')>'2019-00-00'
字符串类型的数字默认在比较大小时,往往会遇到一些坑,例如:在10和9比较大小时字符串类型的数字会以为9比10大,但事实上我们想要比较的结果是10>9,这是为什么呢?其实字符串在比较大小时,比较的是它对应的ASCII码,1的ASCII码比9对应的ASCII码小,系统就会认为10<9。 这时我们可以使用MySQL的 CAST() 函数,将想要转换的字符串转换成想要的类型。
例如:字符串‘123.45’可以转成整数,DECIMAL默认取得整数,也可以使用SIGNED
当然也可以指定小数位数,5代表了要取的数字位数(整数位和小数位和),2代表要取到的小数位数。
转换完成就可以用来进行后期的数值比较了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)