MySql 备忘录

在MySQL中如果不为NOT NULL字段赋值(等同于赋NULL值)也就是说,MySQL中NOT NULL并不是一个约束条件了

一、关于空值
提示:

在MySQL中如果不为NOT NULL字段赋值(等同于赋NULL值)

例如:
为一个NOT NULL的整型赋NULL值,结果是0,它并不会出错,
为一个NOT NULL的CHAR型赋NULL值,结果是”(空字符串)
DATATIME
-> ‘0000-00-00 00:00:00 ‘
MySQL会自动将NULL值转化为该字段的默认值, 那怕是你在表定义时没有明确地为该字段设置默认值.

也就是说,MySQL中NOT NULL并不是一个约束条件了.

如果字段设置为可空,则插入记录时如果没有给该字段赋值,那么MySQL自动用Default的值,如果没有设置Default,则无论是该字段是什么类型该字段值为NULL.
字段是否可空,虽然不是一个约束条件,却会改变系统赋默认值的方式。
疑问:以上规则是否仅限于MyIsam表,InnoDB呢??也是这样处理的吗??

连接字符集和校对
character_set_server和collation_server 服务器字符集和校对规则
character_set_database和collation_database 默认的数据库字符集和校对规则

#当查询离开客户端后,在查询中使用哪种字符集?
服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。
#服务器接收到查询后应该转换为哪种字符集?
服务器将客户端发送的查询从character_set_client转换到character_set_connection
#服务器发送结果集或返回错误信息到客户端之前应该转换为哪种字符集?
character_set_results变量指示服务器返回查询结果到客户端使用的字符集。
包括结果数据(列值)和结果元数据(列名)。
有两个语句影响连接字符集:

SET NAMES ‘charset_name’
SET CHARACTER SET charset_name
SET NAMES ‘x’语句与这三个语句等价:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
SET CHARACTER SET x语句与这三个语句等价:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET collation_connection = @@collation_database; (设置为默认的数据库连接字符集和校对规则)

深入Mysql字符集设置

用于元数据的UTF8
元数据是“关于数据的数据”。描述数据库的任何数据—作为数据库内容的对立面—是元数据。因此,列名、数据库名、用户名、版本名以及从SHOW语句得到的结果中的大部分字符串是元数据。还包括INFORMATION_SCHEMA数据库中的表中的内容,因为定义的那些表存储关于数据库对象的信息。

元数据表述必须满足这些需求:

· 全部元数据必须在同一字符集内。否则,对INFORM一个TION_SCHEMA数据库中的表执行的SHOW命令和SELECT查询不能正常工作,因为这些运算结果中的同一列的不同行将会使用不同的字符集。

· 元数据必须包括所有语言的所有字符。否则,用户将不能够使用它们自己的语言来命名列和表。

为了满足这两个需求,MySQL使用Unicode字符集存储元数据,即UTF8。

服务器将character_set_system系统变量设置为元数据字符集的名:

mysql> SHOW VARIABLES LIKE ‘character_set_system’;

mysql> SHOW VARIABLES LIKE ‘character%’;查看当前数据库的字符集设置情况

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/431670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 14:13:47
下一篇 2025年11月7日 14:17:22

相关推荐

  • 解耦 App Engine Go 运行时上下文以避免平台锁定

    本文探讨了在 go 语言 app engine 应用中,如何优雅地管理 `appengine.context`,以实现与 app engine 平台的解耦。通过引入配置标志和自定义外观模式,可以在不同环境下切换使用 app engine 服务或替代服务,从而提高代码的可移植性和可维护性。 在开发 G…

    2025年12月16日
    000
  • 如何使用Golang开发Web后台管理系统

    使用Golang开发Web后台管理系统需选择高效框架如gin,设计RESTful API并划分路由组,集成GORM操作数据库实现用户、角色等模块,通过JWT实现鉴权中间件保护接口,返回统一数据格式对接前端,结合validator、zap和Swagger提升系统稳定性和可维护性。 开发一个Web后台管…

    2025年12月16日
    000
  • Golang如何开发图书管理系统

    答案:使用Golang开发图书管理系统需分层设计,包括model定义图书结构,store实现数据存储,service处理业务逻辑,handler响应HTTP请求。通过Gin框架搭建RESTful API,用内存或数据库存储数据,结合路由与中间件实现增删改查功能,并注重错误处理与输入验证,便于后期扩展…

    2025年12月16日
    000
  • Golang如何开发用户登录注册功能

    使用Go语言实现用户登录注册功能,需处理HTTP请求、验证数据、加密密码并管理会话。2. 项目结构包含handlers、models、middleware等目录,依赖net/http、gorilla/mux和bcrypt。3. 定义User模型并设计数据库表存储用户名和哈希密码。4. 注册时验证输入…

    2025年12月16日
    000
  • 如何使用Golang开发爬虫数据存储

    使用Golang开发爬虫需先发送HTTP请求获取网页内容,可采用net/http库或colly等第三方库;接着用goquery解析HTML,通过CSS选择器提取标题、链接等结构化数据;随后将数据存储至MySQL、MongoDB或本地JSON/CSV文件;最后利用goroutine实现并发抓取,并设置…

    2025年12月16日
    000
  • Golang单元测试数据库操作实践

    使用内存数据库如SQLite配合事务回滚可实现高效隔离的单元测试,通过接口抽象与Mock提升逻辑独立性,集成测试则可用Docker启动真实数据库验证兼容性,确保测试可重复且无副作用。 在Go语言开发中,数据库操作的单元测试是保障数据层逻辑正确性的关键环节。直接使用生产数据库进行测试会带来副作用,比如…

    2025年12月16日
    000
  • Golang Factory工厂模式创建对象实践

    工厂模式通过封装对象创建逻辑,提升代码解耦与扩展性。1. 简单工厂使用函数根据参数返回不同实现,如支付方式选择;2. 抽象工厂支持多产品族,如不同地区支付与通知组合;3. 适用于数据库驱动、缓存、配置加载等场景。 在Go语言中,Factory(工厂)模式是一种创建型设计模式,用于解耦对象的创建逻辑。…

    2025年12月16日
    000
  • Golang简单博客系统开发实战

    答案:用Go语言可快速搭建一个具备文章发布、查看和管理功能的简单博客系统。通过合理设计项目结构,定义文章模型并使用内存存储,结合HTTP路由与处理器实现CRUD操作,利用模板引擎渲染HTML页面,并提供静态资源访问支持,最终运行服务即可在浏览器中访问基础博客首页,具备完整雏形且易于扩展。 想快速上手…

    2025年12月16日
    000
  • Golang包重命名与导入别名使用方法

    在Go语言中,包重命名通过import别名解决命名冲突、提升可读性。例如import ( myfmt “fmt” )将fmt重命名为myfmt,后续用myfmt.Println调用;当导入同名包如json和jsoniter时,别名可明确区分标准库与第三方;使用_进行匿名导入可…

    2025年12月16日
    000
  • Go语言中实现动态IN查询的指南

    本文详细介绍了在Go语言中使用database/sql包执行带有动态参数列表的IN查询的方法。由于database/sql不直接支持将切片作为单个占位符的参数,因此需要通过动态生成SQL占位符字符串并使用interface{}切片配合可变参数来构建查询,同时考虑了空切片等边界情况。 理解databa…

    2025年12月16日
    000
  • 数据库连接池性能调优实践

    合理设置连接池参数可提升系统性能,需根据业务特征配置最小/最大连接数、获取超时时间及空闲回收策略;启用借出、归还或空闲时的连接检测机制保障连接有效性;结合监控活跃连接、等待线程等指标持续优化;针对高并发、批处理、读写分离等场景差异化配置,实现资源与稳定的平衡。 数据库连接池是应用系统与数据库之间的重…

    2025年12月16日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误解析

    本文详细阐述了go语言使用`go-sql-driver/mysql`驱动连接外部mysql数据库的正确方法。重点介绍了数据源名称(dsn)的规范格式,特别是主机地址部分的配置,以避免常见的“getaddrinfow: the specified class was not found.”等网络解析错…

    2025年12月16日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误排查

    本文将深入探讨go语言如何使用`database/sql`和`go-sql-driver/mysql`连接外部mysql数据库。我们将详细介绍dsn(数据源名称)的构建方式,并通过一个实际案例分析`getaddrinfow: the specified class was not found.`这一…

    2025年12月16日
    000
  • OAuth认证后的用户数据持久化与安全会话管理

    本教程将深入探讨OAuth2认证流程中,如何高效且安全地处理从身份提供商获取的用户数据,并将其持久化到数据库。我们将介绍使用UPSERT操作来避免数据重复和竞态条件,并详细阐述如何通过配置安全的HTTP-only会话Cookie来建立和维护用户会话,以抵御常见的Web安全威胁,确保用户认证体验的流畅…

    2025年12月16日
    000
  • Go语言database/sql包中处理动态SQL IN 查询的实践指南

    本文详细介绍了在Go语言中使用database/sql包执行动态SQL IN查询的通用方法。针对IN子句无法直接接受切片作为参数的问题,教程重点阐述了如何通过动态生成占位符?并配合可变参数传递切片元素来构建安全高效的查询,并提供了完整的代码示例和注意事项。 在go语言的database/sql包中,…

    2025年12月16日
    000
  • OAuth2认证后用户数据存储与会话安全指南

    本文旨在提供OAuth2认证后处理用户数据持久化和会话管理的最佳实践。我们将探讨如何将OAuth返回的用户数据安全地存储到数据库,推荐使用事务性的UPSERT操作来处理用户存在性检查与插入/更新。同时,文章还将详细阐述如何通过配置安全的HTTP-only会话Cookie来建立和维护用户会话,并强调H…

    2025年12月16日
    000
  • OAuth响应处理与安全会话管理:数据库集成与Cookie最佳实践

    本教程深入探讨了OAuth2认证流程结束后,如何安全高效地处理用户数据并建立会话。文章首先介绍了将OAuth提供者返回的用户数据存储到数据库的最佳实践,重点讲解了原子性的UPSERT操作以避免数据冗余和竞态条件。随后,详细阐述了基于Cookie的会话管理策略,强调了使用HTTPS、Secure、Ht…

    2025年12月16日
    000
  • Go database/sql 包查询结果行数精确判断与首行数据获取

    本文深入探讨Go语言中database/sql包在数据库查询时,如何精确判断返回结果的行数(零行、单行或多行),并安全地获取首行数据。针对QueryRow的局限性,文章提供了一个通用的自定义函数方案,利用db.Query和*sql.Rows的特性,实现对查询结果的细粒度控制,同时强调了错误处理和资源…

    2025年12月16日
    000
  • OAuth2集成:用户数据持久化与安全会话管理指南

    本文旨在探讨OAuth2认证流程结束后,如何高效且安全地处理用户数据持久化与会话管理。我们将重点介绍数据库中用户数据的“存在则更新,不存在则插入”(UPSERT)策略,并深入讲解如何利用HTTPS和安全、HttpOnly的Cookie来建立健壮的用户会话,以确保用户体验和系统安全。 1. OAuth…

    2025年12月16日
    000
  • 在Go语言中处理SQL IN 子句的动态参数绑定

    本文旨在解决Go语言database/sql包中,如何将动态切片(slice)作为IN查询条件参数的问题。由于db.Query无法直接将切片展开为多个占位符,我们将探讨一种通用且安全的解决方案,通过动态生成SQL语句中的占位符并结合interface{}类型转换来实现,确保代码的灵活性和防止SQL注…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信