SQL修改字段类型的语法 SQL字段类型修改语句详解

mysql如何修改字段总长度限制如何设置

要直接更改字段的长度,请使用 ALTER TABLE。

表名称 t1 ,将名称字段更改为 2 0 个字符,发出 ALTERTABLEt1 MODIFYCOLUMNnameVARCHAR(2 0)。

请注意数据不能超过新的长度,否则会报错。

长度由长变短。
如果数据超过新的长度,它将被截断。
先处理数据。

VARCHAR具有可变长度,CHAR具有固定长度,并且CHAR的长度不能改变。

插入数据进行更改后进行检查。

在进行更改之前备份表数据。

Mysql中的varchar 如何设置最大长度

记得上次帮邻居老王修电脑时,他数据库里存了很多图片,都是中文路径,但导出却是乱码。
这是由于字符集错误造成的。
您提到的 varchar(5 0) 和 6 5 ,5 3 2 字节实际上非常令人困惑。

MySQL文档说varchar(m)中的M是最大列长度,但实际长度取决于字符集。
例如,在utf8 中,一个汉字可以占用3 个字节,英文可以占用1 个字节。
你测试的2 1 7 8 5 字节正好是2 1 7 8 5 /3 ≈7 2 6 1 个汉字,或者说2 1 7 8 5 个英文字符。
这与6 5 ,5 3 2 字节的限制有关,但并不是简单的减法。

文档说如果长度大于2 5 5 ,则使用两字节前缀。
这确实是一个陷阱。
例如,当使用 varchar(2 5 6 ) 时,第一个字节存储 2 5 5 ,第二个字节存储 1 ,总共 2 个字节前缀。
因此,6 5 5 3 5 -2 =6 5 5 3 3 的计算是正确的,但实际存储时必须减去1 字节的长度值。
所以最大为 6 5 5 3 2 字节。

但是utf8 下2 1 7 8 5 字节的限制更实用。
我在mysql5 .0.4 5 上测试了一下,UTF8 编码的varchar最大存储容量为2 1 7 8 5 字节。
这比文档中规定的 6 5 ,5 3 2 字节小得多。
可能是出于MySQL内部优化或者兼容性的考虑。
等等,那是另一回事了。
我发现如果varchar超过2 5 5 ,MySQL会自动将其转换为varchar(2 5 5 ),并在插入时添加警告。

字符集和长度限制实际上比想象的要复杂。
例如latin1 中的一个英文字符占用1 个字节,utf8 中的一个汉字占用3 个字节。
因此,varchar(5 0)在latin1 下可以存储5 0个英文字符,但在utf8 下只能存储5 0/3 ≈1 6 个汉字。
这与文档中所说的“最大有效长度为6 5 ,5 3 2 字节”有关。

但是文档并没有详细说明MySQL是如何计算这6 5 ,5 3 2 的。
可能是6 5 5 3 5 -1 (长度值)-1 (校验位?)。
但当你实际使用汉字时,6 5 5 3 2 字节的限制更像是6 5 5 3 2 /3 ≈2 1 8 4 4 个汉字。
2 1 7 8 5 你测试的可能包含一些特殊字符或者MySQL的内部固定开销。

嗯,我觉得 mysql.com 上的文档不够简单。
如果说明书改成中文就更好了。
例如:“变长varchar(m)字符串最多可以存储6 5 5 3 2 字节,但实际上受字符集影响,如果超过2 5 5 则使用2 字节前缀,小于2 5 5 则使用1 字节前缀。
UTF8 下,varchar(5 0)建议中英文字符使用5 个字符。
varchar(2 1 8 4 4 )存储汉字和varchar(5 0) 存储英文字符》
但是说真的,为什么MySQL不直接告诉你utf8 可以存储多少个汉字呢?这对于用户来说是多么的麻烦啊。
估计是为了兼容不同的字符集,所以我只是给出一个通用的值。
但这个一般值并没有明确解释,所以我们这些使用数据库的人必须自己计算一下。

等一下,我突然想到,如果以后使用utf8 mb4 字符集,一个表情占4 个字节,那么varchar(5 0)只能存储5 0/4 =1 2 个表情。
文档需要快速更新。
现在的手册是在utf8 时代写的,现在大家都用utf8 mb4