1.例如关于varchar(50),关于这个括号里面的50,大家应该都知道是该字段所能存入的字符大小,在网上查阅资料时,我发现的一个普遍的论调是(n)代表可以添加n个字符。 但是实际上真的是这样吗? 在Linux,UTF-8,MySQL5.1.73的环境下,我们测试一下 先写好一个简单的表 之后开始添加一条数据进表
INSERT INTO student (n_name) VALUES( '一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十' );添加完成,看下表中有什么 添加后可以看出,只添加进入了十六个汉字,汉字后还有一个乱码的字符。 通过这个结果我们就可以看出,网上一些关于varchar(n)的说法是不正确的,这里的n其实指的是字节,在utf-8的编码下,一个汉字占3个字节,一个字母占一个字节,因此,varchar(50)就代表着最多可以添加50个字节,在UTF-8编码情况下最多添加16个汉字,50个英文字母(空格也占一个字节) GBK编码下一个汉字占两个字节,一个字母占一个字节,因此在GBK编码情况下最多添加25个汉字,50个英文字母,空格同上
附1:测试过程中,在使用5.7.29版本的MySQL下,测试添加语句时,如果添加超过预设的最大长度n,会直接提示并报错,无法添加到表中.
INSERT INTO student (n_name) VALUES( '一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十' );2.主键自增相关问题 设置为主键的一般都是整形数据,主键一般都设置了自增选项,即在建表时,在主键后加上 AUTO_INCREMENT即可,关于主键还有一些小问题如下 1)自增默认都是从1开始自增 2)可以手动为主键添加数据,且可以随意输入数值,不必接上上一条数据的值 (当然,输入非主键数据类型的数据和超过数据最大范围的数据也是不行的)
INSERT INTO student1 (id,u_name,age) VALUES( 25,'一',20 );3) 主键是默认不能重复的,那么当主键上的数字输入了一个较大的数字,如上图中的id=25,那么还可以手动添加比25小的数字进表吗? 答案是可以的,当然前提也是不能跟表中数据的id重复.
INSERT INTO student1 (id,u_name,age) VALUES( 22,'一',20 );并且会自动根据id来进行升序排序
4)那么当我输入了id=25的数据进表之后,我不再手动添加主键上的数据,那么主键数据的自增是从哪里开始呢? 答:从最大的数字处开始自增
INSERT INTO student1 (u_name,age) VALUES( '一',20 );可以看到,再次添加数据进表时,字段id从25开始自增。
另外关于第一个问题,网上说的可能是win版本的MySQL,但是本人电脑不知为何没办法使用win版本的MySQL,如果您看到本文后测试过win版本的MySQL,可以在评论区说一下测试结果,本人感激不尽~
