当前位置: 首页 > news >正文

Django 之 CharField 和 TextField

CharField

test_char = models.CharField(max_length=288)

 设置长度为 288 并不会报错,这取决于你的数据库后端,mysql char 类型长度为 255,django 里面设置超过 255 并不会有提示,个人感觉有点误导人,起码给个警告也行,但是在插入数据时,字节数大于 255 会提示:django.db.utils.DataError: (1406, "Data too long for column 'test_char' at row 1"),注意这里不是字符的长度,而是字节长度。
在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。例如,汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。
如何测试字节长度和字符长度:

str1 = "人生苦短,我用Python"
len(str1)
13
len(str1.encode('utf-8'))
27
len(str1.encode('gbk'))
20

注意:CharField 类型会强制校验 max_length,所以参数必填,在官方文档中解释到:一个长度CHAR列被固定在创建表声明的长度。长度可以是 0 到 255 之间的任何值。CHAR 存储值时,它们会用空格右填充到指定的长度。当CHAR被检索到的值,拖尾的空格被删除,除非 PAD_CHAR_TO_FULL_LENGTH启用SQL模式。所以如果长度设置的过大但实际用时却存储很少的数据时对数据库也是一种压力。

TextField

test_char = models.TextField(max_length=288)

存储长度可以为 0 到 65,535 之间的值,也是字节数,存储方式和 char 类型稍微不同,TextField 因为可以存储短数据和长数据,所以在存储时稍有不同,VARCHAR值存储为 1 字节或 2 字节长度的前缀加数据。长度前缀表示值中的字节数。如果值需要不超过 255 个字节,则列使用一个长度字节,如果值可能需要超过 255 个字节,则使用两个长度字节。
但是需要注意的是,在不同的数据库后端,如果存储的字节数真的符合 65,535 ,那么也会存在一个问题,在 mysql 官方解释中,如果 sql 的包大于 4 M, 也会抛出异常:django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server during query ([WinError 10053] 你的主机中的软件中止了一个已建立的连接。)'),此时要修改 max_allowed_packet 配置, 默认为 4M

总结


长度的区别,CharField 范围是0~255, TextField 最长是64k(65,535 bytes)
效率来说基本是 CharField > TextField
CharField 必须传入 max_length,另一个场景用于在 modelform 中使用,TextField 可以不传参数
选取类型时可以结合已下场景来考虑:

该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。
若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。
若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。
对于字段值存储很小的信息,如性别等,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息

相关文章:

Django 之 CharField 和 TextField

CharField test_char models.CharField(max_length288)设置长度为 288 并不会报错,这取决于你的数据库后端,mysql char 类型长度为 255,django 里面设置超过 255 并不会有提示,个人感觉有点误导人,起码给个警告也行&…...

recyclerview 使用的坑

1.有不同的布局 12_GridLayoutManager setSpanSizeLookup()方法 - 简书 setSpanSizeLookup 这个方法要会 spanCount和 getSpanSize spanCount/getSpanSize() 才是这一项所占的宽度 2.均分 item布局要设置宽度为match_paraent 3.设置完了。发现高度不一样,…...

DBeaver连接mysql、oracle数据库

1. DBeaver连接mysql 1) 下载DBeaver https://dbeaver.io/download/,并安装 2) 新建数据库连接 3)选择mysql驱动程序 4)填写连接设置内容 5)点击 “编辑驱动设置”,并填写相关信息 6)选择本地…...

Kivy GridLayout 布局

Kivy GridLayout 是一种用于构建用户界面的布局类型,可以帮助我们快速创建具有固定列和行的网格布局。GridLayout 布局是可以适用于任意数量的行和列的布局,然后在这些行和列中放置 UI 元素。 Kivy 的 GridLayout 使用起来类似于 HTML 的表格&#xff0c…...

Spark高手之路2—Spark安装配置

文章目录Spark 运行环境一、Local 模式1. 下载压缩包2.上传到服务器3. 解压4. 启动 Local 环境5. 命令行工具6. 退出本地模式7. 提交应用二、Standalone 模式1. 解压2. 修改配置文件1)进入解压缩后路径的 conf 目录,复制 workers.template 文件为 worker…...

Java中对象的比较

目录元素的比较基本类型的比较引用类型的比较1. 覆写基类的equals2. 基于Comparble接口类的比较3. 基于比较器比较三种方法对比元素的比较 基本类型的比较 这里就拿整型, 字符型, 布尔型 为例: public static void main(String[] args) {int a 10;int b 20;System.out.pri…...

Python编程训练题2

1.11 有 n 盏灯&#xff0c;编号 1&#xff5e;n&#xff08;0<n<100&#xff09;。第 1 个人把所有灯打开&#xff0c;第 2 个人按下所有编号为 2 的倍数的开关&#xff08;这些灯将被关掉&#xff09;&#xff0c;第 3 个人按下所有编号为 3 的倍数的开关&#xff08;其…...

Shifu基础功能:设备管理

设备管理 deviceshifu_configmap.yaml中的telemetries表示自动测量记录传导。Shifu通过telemetries中设置的方法&#xff0c;以指定时间向设备周期性地发送请求&#xff0c;来判断设备的连接情况。如果设备出现故障或者连接出现问题&#xff0c;edgeDevice的状态将发生改变&am…...

交互:可以执行命令行的框架才是好框架

上一节课&#xff0c;我们开始把框架向工业级迭代&#xff0c;重新规划了目录&#xff0c;这一节课将对框架做更大的改动&#xff0c;让框架支持命令行工具。 第三方命令行工具库 cobra obra 不仅仅能让我们快速构建一个命令行&#xff0c;它更大的优势是能更快地组织起有许多…...

eunomia-bpf 和 wasm-bpf 项目的 3 月进展

eunomia-bpf 项目是一个开源项目&#xff0c;旨在提供一组工具&#xff0c;用于在 Linux 内核中更方便地编写和运行 eBPF 程序。在过去一个月中&#xff0c;该项目取得了一些新的进展&#xff0c;以下是这些进展的概述。 首先&#xff0c;eunomia-bpf 动态加载库进行了一些重要…...

Spring框架核心功能手写实现

文章目录概要Spring启动以及扫描流程实现基础环境搭建扫描逻辑实现bean创建的简单实现依赖注入实现BeanNameAware回调实现初始化机制模拟实现BeanPostProcessor模拟实现AOP模拟实现概要 手写Spring启动以及扫描流程手写getBean流程手写Bean生命周期流程手写依赖注入流程手写Be…...

k8s-镜像构建Flink集群Native session

一.Flink安装包下载 wget https://dlcdn.apache.org/flink/flink-1.14.6/flink-1.14.6-bin-scala_2.12.tgz 二.构建基础镜像推送私服 docker pull apache/flink:1.14.6-scala_2.12 docker tag apache/flink:1.14.6-scala_2.12 172.25.152.2:30002/dmp/flink:...

在 k8S 中搭建 SonarQube 7.4.9 版本(使用 PostgreSQL 数据库)

本文搭建的 SonarQube 版本是 7.4.9-community&#xff0c;由于在官方文档中声明 7.9 版本之后就不再支持使用 MySQL 数据库。所以此次搭建使用的数据库是 PostgreSQL 11.4 版本。 一、部署 PostgreSQL 服务 1. 创建命名空间 将 PostgreSQL 和 SonarQube 放在同一个命名空间…...

从getBean()分析BeanFactory和ApplicationContext

本文说了哪些问题: BeanFactory 是啥ApplicationContext 是啥什么时候去实例化一个 bean, BeanFactory 和 ApplicationContext 实例化 bean 都是在什么时候 一个 Bean 什么时候被初始化 任何一个 Bean, 都是在 getBean () 的时候被初始化的.BeanFactory 需要字节手动调用 getb…...

详解Redis的主从同步原理

前言 Redis为了保证服务高可用&#xff0c;其中一种实现就是主从模式&#xff0c;即一个Redis服务端作为主节点&#xff0c;若干个Redis服务端作为主节点的从节点&#xff0c;从而实现即使某个服务端不可用时&#xff0c;也不会影响Redis服务的正常使用。本篇文章将对主从模式…...

前端项目上线后,浏览器缓存未刷新问题

文章目录问题背景一、解决办法二、实现原理关于缓存强缓存协商缓存刷新页面对浏览器的影响总结问题背景 前端页面开发测试完&#xff0c;要进行上线&#xff0c;某些页面上传更新到服务器之后&#xff0c;浏览器并没有更新&#xff0c;渲染的还是老页面。这是因为浏览器读了缓存…...

Vulnhub系列:Raven 1

该篇为Vulnhub系列靶机渗透&#xff0c;本次靶机存在4个flag。下面开始我们今天的渗透之旅。Raven靶机有很多种思路&#xff0c;我将对其进行一一整理。首先进行信息收集&#xff0c;利用arp-scan和nmap&#xff0c;进行靶机的ip及端口扫描发现了22、80、111端口。下面访问80端…...

MybatisPlus------多数据源环境(十一)

MybatisPlus------多数据源环境&#xff08;十一&#xff09; 生产环境中常常会存在多个数据源。 比如读写分离、一主多从、混合模式等等。 首先再pom文件中需要引入依赖&#xff1a; 多数据源所需要使用到的依赖 <!-- 多数据源所需要使用到的依赖--><depend…...

Tomcat+IDEA+Servlet能显示页面但提交form表单出现404问题

问题&#xff1a; 当我们使用tomcat启动&#xff0c;然后输入对应的url路径时候&#xff0c;能出现该html的页面&#xff0c;但提交表单后&#xff0c;却出现了404的问题&#xff0c;这时候我就很疑惑了....然后开始慢慢分析。 思路&#xff1a; 首先我们得知道404状态码是什…...

【蓝桥杯集训16】多源汇求最短路——Floyd算法(2 / 2)

目录 Floyd求最短路模板 4074. 铁路与公路 - floyd 脑筋急转弯 Floyd求最短路模板 活动 - AcWing 题目&#xff1a; 给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 再给定 k 个询问&#xff0c;每个询问包含两个整数 x 和…...

索尼Bravia家庭影院新品登场,能否重塑市场格局?

索尼Bravia新品&#xff1a;模块化家庭影院新选择索尼宣布推出七款新的Bravia家庭影院产品&#xff0c;涵盖一台电视、两款条形音箱、三款低音炮和后置音箱。除Theater Bar 5外&#xff0c;产品可自由搭配组合。其中&#xff0c;Bravia Theater Bar 7作为中高端条形音箱&#x…...

Qwen3-ASR-1.7B在C++项目中的集成与应用

Qwen3-ASR-1.7B在C项目中的集成与应用 1. 环境准备与快速部署 要在C项目中集成Qwen3-ASR-1.7B语音识别功能&#xff0c;首先需要准备好开发环境。这个模型虽然功能强大&#xff0c;但部署起来并不复杂&#xff0c;只需要几个简单的步骤。 系统要求&#xff1a; 操作系统&am…...

快速体验语义搜索:用Qwen3-Embedding-4B搭建个人知识库

快速体验语义搜索&#xff1a;用Qwen3-Embedding-4B搭建个人知识库 1. 认识Qwen3-Embedding-4B&#xff1a;你的智能语义理解助手 想象一下&#xff0c;你有一个能理解各种语言、能记住海量文档内容、还能帮你快速找到相关信息的智能助手。这就是Qwen3-Embedding-4B能为你做的…...

CosyVoice CPU运行效率优化实战:从原理到性能调优

最近在做一个实时语音处理的项目&#xff0c;用到了CosyVoice这个框架。项目上线初期&#xff0c;发现服务在CPU上的表现不太理想&#xff0c;尤其是在处理并发语音流时&#xff0c;CPU占用率经常飙高&#xff0c;处理延迟也时高时低&#xff0c;很不稳定。经过一番排查和优化&…...

51单片机按键控制实战:从消抖到状态切换的完整代码解析

51单片机按键控制实战&#xff1a;从消抖到状态切换的完整代码解析 在嵌入式系统开发中&#xff0c;按键控制是最基础也最关键的交互方式之一。无论是简单的家电控制面板&#xff0c;还是复杂的工业设备操作界面&#xff0c;按键作为人机交互的桥梁&#xff0c;其稳定性和响应速…...

运筹优化算法工程师入门指南:从数学基础到实战项目(附学习资源清单)

运筹优化算法工程师入门指南&#xff1a;从数学基础到实战项目&#xff08;附学习资源清单&#xff09; 运筹优化&#xff08;Operations Research&#xff09;作为一门融合数学建模与工程实践的学科&#xff0c;正在供应链管理、智能制造、交通调度等领域展现出不可替代的价值…...

ai辅助开发新思路:让快马kimi模型将ps“液化”滤镜创意变成网页动画

最近在做一个创意项目时&#xff0c;突然想到&#xff1a;如果能将PS里那个超好玩的"液化"滤镜效果搬到网页上&#xff0c;让用户直接通过鼠标拖拽就能实时扭曲图片&#xff0c;应该会很有趣。作为一个设计师转前端的跨界选手&#xff0c;我决定挑战一下这个想法。 理…...

Wan2.2-I2V-A14B部署教程:解决端口冲突/驱动报错/加载失败全方案

Wan2.2-I2V-A14B部署教程&#xff1a;解决端口冲突/驱动报错/加载失败全方案 1. 环境准备与快速部署 1.1 硬件与系统要求 在开始部署前&#xff0c;请确保您的设备满足以下最低配置要求&#xff1a; 显卡&#xff1a;RTX 4090D 24GB显存&#xff08;必须匹配&#xff09;内…...

为什么你的AI服务OOM频发?Python智能体内存管理5个致命配置错误,今天必须修复

第一章&#xff1a;AI服务OOM频发的底层归因与诊断路径AI服务在高并发推理或大模型微调场景下频繁触发OOM&#xff08;Out-of-Memory&#xff09;&#xff0c;表面是内存耗尽&#xff0c;实则根植于资源抽象层与运行时协同机制的结构性失配。现代AI框架&#xff08;如PyTorch、…...

Lychee-Rerank与微信小程序结合:打造移动端智能文档搜索工具

Lychee-Rerank与微信小程序结合&#xff1a;打造移动端智能文档搜索工具 你有没有遇到过这种情况&#xff1f;在公司内部的小程序里想查个产品手册或者报销制度&#xff0c;输入关键词后&#xff0c;搜出来的结果要么完全不沾边&#xff0c;要么一大堆文件让你自己翻。明明知道…...