关于MYSQL字段长度设置的问题

今天才发现,这么多年了一直在犯一个经验主义的错误.实在太丢脸了.

mysql的字段类型是跟字段长度匹配绑定的.原来在其它地方一直都是按GBK中文字符=2byte长度的方式去计算合适的字段长度.

结果mysql里根本不用计算.指明字段类型是gbk的话,长度5就是5个汉字,长度1就是1个汉字.同理UTF-8类型也无须按1:3的byte比例去算长度.

 

### 如何在 MySQL设置字段长度大于 0 在 MySQL 数据库中,定义字段时可以通过指定数据类型的参数来控制其长度或范围。对于数值型字段(如 `INT` 或 `FLOAT`),通常不需要显式设定最小值为大于零的约束;而是通过使用 `CHECK` 约束或者默认值实现这一目标[^1]。 #### 使用 CHECK 约束 从 MySQL 8.0 开始支持 SQL 标准中的 `CHECK` 约束功能。可以利用此特性强制使某一列仅接受正数: ```sql CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, positive_number INT CHECK (positive_number > 0) ); ``` 上述语句创建了一个名为 `example_table` 的表,在该表中插入到 `positive_number` 列的数据必须满足大于零的要求[^2]。 #### 设置 DEFAULT 值防止负数输入 另一种方法是在设计数据库结构阶段给定合理的默认值,并结合应用程序逻辑确保不会存入非法数据: ```sql ALTER TABLE your_table MODIFY COLUMN some_column DECIMAL(10,2) NOT NULL DEFAULT '0.01'; ``` 这里修改了现有表格里的某个特定栏位属性,默认情况下它总是保持正值状态[^3]。 另外需要注意的是,当处理字符串类型(比如 VARCHAR)的时候,“长度”的概念指的是字符数量而非字节数量。由于多字节编码的存在(例如 UTF-8 编码下的汉字占用三个甚至四个字节空间),实际存储所需的空间可能会超出预期尺寸[^4]。 最后提醒一点,尽管技术上允许我们如此操作,但在业务层面也应该仔细考虑为何要施加这样的限制以及是否有更优解决方案可用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值