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

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

from django.db import modelsclass 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-数据库迁移命令生成

相关命令如下:

CD E:\Python_project\P_001\myshop-test\myshop\
E:
manage.py makemigrations

在这里插入图片描述

06-执行数据库迁移命令

manage.py migrate

在这里插入图片描述

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

07-1-测试中文汉字

在这里插入图片描述

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时是可以写入成功的。

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

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

此时运行报错,原因是字符串超过规定超过长度了:
在这里插入图片描述

07-1-测试英文字符

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

user = User(username='abcd', email='b001@example.com')
user.save()

在这里插入图片描述
可见能成功写入

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

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个字节的存储空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【makedown自带语法技巧】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

YOLOv8优化策略:轻量化改进 | 华为Ghostnet,超越谷歌MobileNet | CVPR2020

🚀🚀🚀本文改进:Ghost bottleneck为堆叠Ghost模块 ,与YOLOV8建立轻量C2f_GhostBottleneck 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.Ghostnet介绍 论文: https://arxiv.org/pdf/1911.11907.…

python数据结构堆栈

堆 堆是一种树形结构:满足两个主要性质 堆是一种完全二叉树:堆中所有层级除了最后一层都是完全填满的,且最后一层的节点都是向左排列堆中的任意节点都不大于(或不小于)其子节点的值,这也是堆的属性 impo…

Java Stream通过findFirst()查找满足条件的一条数据

Stream的findFirst方法在此流中查找第一个元素作为Optional。 如果流中没有元素,findFirst返回空的Optional。 如果流没有顺序,那么findFirst可以选择任何元素。 如果findFirst选择的元素为null,它将抛出NullPointerException。 在javado…

【C++】C++11中的常见语法(上)

C11 一、C11简介二、统一的列表初始化1.{}初始化2. std::initializer_list 三、声明1. auto2. decltype3. nullptr 四、右值引用和移动语义1. 左值引用和右值引用2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 右值引用引用左值及其一些更深入的…

yolov5_master的下载、环境搭建、数据处理及训练全过程

本文借用了以下微博的文章,觉得写的比较全,所以照抄了过来,并且搭建了一遍可以正常训练,在这里作为笔记以后用的时候方便找,这个yolov5_master的使用可以将pth模型文件转换为onnx文件,进而转换为rknn文件&a…

Mybatis缓存相关面试题有多卷

MyBatis 是一个流行的持久层框架,它提供了一个灵活且高效的方式来访问关系型数据库。其中一个重要的特性是缓存机制,它可以帮助提升数据库查询的性能。 MyBatis 的缓存分为一级缓存和二级缓存两种: 一级缓存:默认情况下&#xff0…

揭秘 Gossip 协议:节点之间的悄悄话

欢迎来到我的博客,代码的世界里,每一行都是一个故事 揭秘 Gossip 协议:节点之间的悄悄话 前言Gossip协议简介Gossip 协议的工作原理Gossip 协议的优势Gossip协议的实际应用 前言 在分布式系统中,节点之间的信息传递如同社交中的悄…

供应链+低代码,实现数字化【共赢链】转型新策略

在深入探讨之前,让我们首先明确供应链的基本定义。供应链可以被理解为一个由采购、生产、物流配送等环节组成的网状系统,它始于原材料的采购,经过生产加工,最终通过分销和零售环节到达消费者手中。 而数字化供应链,则是…

Redis 持久化有几种方式?

Redis 持久化有几种方式? 在 Redis 中,有两种主要的持久化方式,分别是快照(Snapshot)和追加文件(Append-Only File,AOF)。 1. 快照(Snapshot)持久化&#x…

235个国家-数字经济发展相关23个指标(2000-2022年)

本文涉及235个国家的数字经济发展的23个相关指标数据,为我们提供了一个全面的视角,用以分析和比较全球范围内数字经济的发展状况。这些国家,年份,移动网络覆盖率,固定电话普及率,固定宽带普及率等指标。这些…

学习记录-自动驾驶与机器人中的SLAM技术

以下所有内容均为高翔大神所注的《自动驾驶与机器人中的SLAM技术》中的内容 融合导航 1. EKF和优化的关系 2. 组合导航eskf中的预测部分&#xff0c;主要是F矩阵的构建 template <typename S> bool ESKF<S>::Predict(const IMU& imu) {assert(imu.timestamp…

Mysql索引学习

MySQL索引是提高数据库查询性能的重要手段。通过合理地使用索引&#xff0c;可以大大减少数据库查询所需的时间&#xff0c;提高查询效率。本文将详细介绍MySQL索引的基本概念、种类、使用方法和优化策略。 一、MySQL索引基本概念 索引是数据库管理系统中用于提高检索操作速度…

典型的无人机打击技术

无人机打击技术主要指的是用于中和、摧毁或干扰无人机&#xff08;UAV&#xff09;的各种技术手段。 这些技术随着无人机的广泛使用而迅速发展&#xff0c;特别是在军事和安全领域。下面是一些主要的无人机打击技术及其原理&#xff1a; 射频干扰&#xff08;RF Jamming&#x…

国产服务器 BIOS下组建RADI不同RAID卡-超详细

国产服务器 长城 组建Raid的方法 说明 大多数国产服务器通用型服务器进入BIOS的都是按DEL键。 9361RAID卡组建方法 在服务器启动过程中&#xff0c;按下DEL键进入BIOS界面。 进入设备管理器&#xff0c;选择AVAGO MegaRAID页签。 3. 进入RAID卡设备&#xff0c;选择Main Me…

大话 JavaScript(Speaking JavaScript):第十六章到第二十章

第十六章&#xff1a;变量&#xff1a;作用域、环境和闭包 原文&#xff1a;16. Variables: Scopes, Environments, and Closures 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 本章首先解释了如何使用变量&#xff0c;然后详细介绍了它们的工作方式&#xff08;环境…

二叉树与堆的深度解析:数据结构中的关键概念及应用

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 前言树概念注意&#xff1a; 树的基本概念及术语基本概念及术语以家谱为例 树的表示孩子兄弟表示法简介优势应用示例 树在实际中的运用文件系统的目录树…

响应式编程Reactor API大全(上)

Reactor 是一个基于响应式编程的库&#xff0c;主要用于构建异步和事件驱动的应用程序。Reactor 提供了丰富的 API&#xff0c;包括创建、转换、过滤、组合等操作符&#xff0c;用于处理异步数据流。以下是一些 Reactor 的主要 API 示例&#xff1a; pom依赖 <dependencyMan…

【算法】激光炸弹(二维数组前缀和)

题目 地图上有 N 个目标&#xff0c;用整数 Xi,Yi 表示目标在地图上的位置&#xff0c;每个目标都有一个价值 Wi。 注意&#xff1a;不同目标可能在同一位置。 现在有一种新型的激光炸弹&#xff0c;可以摧毁一个包含 RR 个位置的正方形内的所有目标。 激光炸弹的投放是通过…

中间捕获事件:IntermediateCatchingEvent(TimerEvent)

一&#xff1a;TimerEvent https://monday.blog.csdn.net/article/details/134435415 应用场景&#xff1a; 定时启动流程&#xff1a;该类型节点作为流程的开始节点&#xff0c;不需要显式启动流程&#xff0c;只需要部署。节点延时审批。节点超时处理&#xff1a;对在指定…