Django的数据库模型的CharField字段的max_length参数与中文字符数的关系探索(参数max_length的单位是字符个数还是字节数?)

01-清理干净之前的数据库迁移信息

02-根据setting.py中的信息删除掉之前建立的数据库


03-删除之后重新创建数据库

04-models.py中创建数据库模型

python 复制代码
from django.db import models


class User(models.Model):
    username = models.CharField(max_length=4)
    email = models.EmailField(unique=True)

    # 其他字段...

    def __str__(self):
        return self.username

在上面的数据库模型代码中我对字段username限制为4个长度,我们进行如下测试

①4个中文汉字能不能正常写入;

②5个中文汉字能不能正常写入;

③4个英文字符能不能正常写入;

④5个英文字符能不能正常写入;

05-数据库迁移命令生成

相关命令如下:

bash 复制代码
CD E:\Python_project\P_001\myshop-test\myshop\
E:
manage.py makemigrations

06-执行数据库迁移命令

bash 复制代码
manage.py migrate

07-写入数据到数据库进行测试

07-1-测试中文汉字

python 复制代码
import os
import django

# 设置Dango运行时需要的环境变量DJANGO_SETTINGS_MODULE
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')

# 加载Django的设置
django.setup()

# 导入模型,注意必须在加载完Django的设置后下面的这句导入模型语句才能被正确执行
from app1.models import User

# # 清空User数据表
# User.objects.all().delete()
# 
# print('Successfully written data to the database.')


# 创建一个用户
user = User(username='欧阳娃娃', email='john@example.com')
user.save()

运行上面的代码后,查看数据表是否写入成功:

可见是写入成功了,也就是说四个中文汉字在max_length=4时是可以写入成功的。

运行下面的代码测试五个中文汉字的情况:

python 复制代码
user = User(username='你是我的儿', email='a002@example.com')
user.save()

此时运行报错,原因是字符串超过规定超过长度了:

07-1-测试英文字符

运行下面的代码测试四个英文字符的情况:

python 复制代码
user = User(username='abcd', email='b001@example.com')
user.save()

可见能成功写入

运行下面的代码测试五个英文字符的情况:

python 复制代码
user = User(username='abcde', email='b002@example.com')
user.save()

此时报错:

08-结论:

Django数据库模型中的参数max_length的单位是字符个数,而不是字节数。

如果你的max_length为100,而且你的字符编码是UTF-8,那么这个字段可以存储包含100个字符的字符串,不管这些字符是英文、汉字还是其他字符。UTF-8 编码下,汉字通常占用3个字节,英文占用1个字节。因此,max_length=100 的情况下,如果是100个英文字符,就占用100个字节的存储空间,而如果是100个中文字符,就占用300个字节的存储空间。

相关推荐
入瘾7 小时前
etcd 显示连接失败
数据库·chrome·etcd
本体智能8 小时前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安11088 小时前
数据库基础知识----数据库大观
数据库·oracle
瀚高PG实验室8 小时前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
百结2149 小时前
PostgreSQL 初体验
数据库·postgresql
AC赳赳老秦10 小时前
Windows 系统 OpenClaw 执行策略报错及管理员权限设置深度解析与实操指南
运维·人工智能·python·django·自动化·媒体·openclaw
ward RINL10 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
bingHHB11 小时前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习
Nontee11 小时前
Redis高可用架构解析
数据库·redis·架构
淼淼爱喝水11 小时前
DVWA SQL 注入(Medium/High 级别)过滤绕过与防范实验(超详细图文版)
数据库·sql·网络安全