Mysql 定义字段的长度

MySQL数据类型详解
本文探讨了MySQL中int和varchar类型的不同长度定义对于实际存储的影响。通过实例演示了int(1)与int(10)在数据存储上的差异,并解释了varchar类型如何根据其定义的最大长度来限制存储内容。
 
Mysql 中定义字段后的数据的用处:
int(1)和int(10)似乎没有什么差别,都表示最大四个字节的整型数据。
例如定义一个名字为test的表:
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(1) NOT NULL,
  `ids` int(10) default NULL,
  `c` char(1) default NULL,
  `cs` varchar(2) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `test` VALUES ('1', '1', 'a', 'aa');
INSERT INTO `test` VALUES ('10', '10', 'a', 'aa');
INSERT INTO `test` VALUES ('2147483647', '2147483647', 'a', 'aa');

可以发现:
  无论是int(1)还是int(10)都最大存取2147483647 (二进制31个1,因为正负取值),可见最大存取4个字节,即int的最大字节数。
  varchar(1)最大存取一个字符,varchar(2)最大存取两个字符。
MySQL 中修改字段长度的 SQL 语句主要通过 `ALTER TABLE` 命令配合 `MODIFY COLUMN` 子句实现。该操作允许调整列的数据类型和长度,同时保留原有数据(只要数据未超出新设定的长度限制)。 修改字段长度的基本语法如下: ```sql ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型(新长度); ``` 例如,若需要将表 `T` 中的列 `C` 的长度修改为 2000(前提是现有数据长度均未超过 2000),可以使用以下 SQL 语句: ```sql ALTER TABLE T MODIFY COLUMN C VARCHAR(2000); ``` 此语句将 `C` 列的长度扩展为 2000 字符,适用于 `VARCHAR` 类型的字段[^1]。 ### 注意事项 - **数据丢失风险**:修改列长度时,如果现有数据长度超过新设定的长度MySQL 将抛出错误或自动截断数据(取决于 SQL 模式设置),可能导致数据丢失。 - **性能影响**:修改字段长度可能触发表的重建,尤其是在大型表上操作时,会对性能产生一定影响。 - **字符集影响**:若表或列使用了多字节字符集(如 `utf8mb4`),则定义长度应考虑字符实际占用的字节数,避免因字节限制导致插入失败。 ### 示例:修改 `job` 列长度为 60 假设有一个表 `emp`,其中 `job` 列当前为 `VARCHAR(30)`,需要将其扩展为 `VARCHAR(60)`,可使用如下语句: ```sql ALTER TABLE emp MODIFY job VARCHAR(60) NOT NULL DEFAULT ''; ``` 此语句不仅修改了字段长度,还保留了原列的约束条件(如 `NOT NULL` 和默认值)[^3]。 ### 相关操作:修改列名与数据类型 除了修改字段长度,`MODIFY COLUMN` 还可用于更改列的数据类型,但不能更改列名。若需修改列名,应使用 `CHANGE COLUMN` 子句。例如: ```sql ALTER TABLE emp CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT ''; ``` 该语句将 `name` 列重命名为 `user_name`,同时将其长度调整为 64[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值