以前在碰到长度不够的时候就不管三七二十一的使劲加长度,现在才发现自己连这种基础问题都不会,这次正好又碰到了关于长度的问题,上网学习一下,然后个人总结如下:
1.String length()是字符个数。
2.byte[] data = str.getBytes();
使用data.length获取的是字节的数目。
3.Java 中的字符本身没有这个概念。但是将字符转换成字节时,组要指定编码。不同的编码会得到不同长度的字节串。
4.unicode,gbk都是双字节的,用read读它会自动识别,当读入像英文这样的可以用一个字节表示的时候,它会自动在高位补0。
5.不同的字符所占的字节是不同的。(此段内容来自百度百科)
(1)ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。
(2)UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
(3)Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。
6.mysql字段长度
(1)mysql 5.X 以上的版本的 定义中 表示的字符长度,如上varchar(20)你既可以添加20个英文字符,也可以添加二十个中文字符。 表示的字符长度(这一点可以建一个长度很小的字段试试,比如长度为5,输入5个中文看看是否可以保存)
(2)mysql 4.X 的版本表示的是字节长度,会根据字符集转变 内容字节长度存储。
(3)关于 int(2) 中的2 ,表示的并非是int类型只能输入2位数字,而是只能显示2位数字范围,可以添加11位的int的任何数字。也就是说,int的长度并不影响数据的存储精度,长度只和显示有关。当数字不足显示宽度时,前面会用0补齐。比如,显示宽度为5,存入100,实际则为00100。
(手册中写:mysql还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。 )
(4)mysql 5.X以上版本 存储时 char最大255字节,这个和字符集是否有关系?
作者测试没有关系,字符集是GBK或者UTF-8在char(255)下都可已添加255个字符(字母或者汉字或者都有)。
如有不当,还望指正!谢谢。
部分参考来源:
http://bbs.csdn.net/topics/390808083
http://blog.csdn.net/xiaoyu19910321/article/details/52325090