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

本文主要是介绍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个字节的存储空间。

这篇关于Django的数据库模型的CharField字段的max_length参数与中文字符数的关系探索(参数max_length的单位是字符个数还是字节数?)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595035

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

Python实现中文大写金额转阿拉伯数字

《Python实现中文大写金额转阿拉伯数字》在财务票据中,中文大写金额被广泛使用以防止篡改,但在数据处理时,我们需要将其转换为阿拉伯数字形式,下面我们就来看看如何使用Python实现这一转换吧... 目录一、核心思路拆解二、中文数字解析实现三、大单位分割策略四、元角分综合处理五、测试验证六、全部代码在财务票

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使