MySQL学习(三):MySQL开发篇(1)——数据类型的选择及字符型介绍

一、选择合适的数据类型

(一)、CHAR与VARCHAR

一般用于保存少量字符串。

1、二者区别
  • 下表显示了各种字符串值保存到CHAR(4)与VARCHAR(4)列后的结果,来说明二者之间的差别。

这里写图片描述
- CHAR(n):定长数据格式,n为能存储的最大字节长度;当存入字符个数小于n时,末尾0补全;当存入字符个数大于n时,截取n个字符;当存储首尾带空格的值时,会自动删除首尾空格。
- VARCHAR(n):变长数据格式,长度为n个字节的可变长度且非Unicode的字符数据;当存入字符个数小于n时,以实际使用为准;当存入字符个数大于n时,截取n个字符;

CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
INSERT INTO vc VALUES('ab  ', 'ab  ');
INSERT INTO vc VALUES('c', 'c');
SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab  +          | ab+            |
| c+             | c+             |
+----------------+----------------+
2、优缺点及使用
  • 一般性建议:

    • CHAR的优缺点:

      • 优点: 由于固定长度,处理速度比较快
      • 缺点:浪费存储空间,程序员需对行尾空格进行处理。
      • 用处:对于长度变化不大且对查询速度有较高需求的数据可考虑用其。
    • VARCHAR:被更多使用。

    • 不同存储引擎对其二者的使用:
    • 这里写图片描述

(二)、TEXT与BLOB

一般用于保存较大文本

1、二者异同
  • 相同点:
    • 用于保存较大文本
  • 不同点:
    • 保存数据格式:
      • BLOB:用于保存二进制数据,eg: 照片。
      • TEXT:用于保存字符数据,eg: 文章或日记。
    • 包括以下类型:
      • BLOB:BLOB、MEDIUMBLOB、LONGBLOB。
      • TEXT:TEXT、MEDIUMTEXT、LONGTEXT。
      • 存储文本长度、存储字节均不同。
2、二者常见问题
  • (1)、会引起一些性能问题,特别是执行大量删除操作时。
    • 影响:输出表中数据后,表的文件大小不变;删除会留下大量“空洞”,后面填入这些“空洞”的记录在插入的性能上会有影响。
    • 解决方案:定期使用OPTIMIZE TABLE功能对这类表进行碎片整理
  • (2)、可以使用合成的(Synthetic)索引提高大文本字段的查询性能。
    • 合成索引:根据大文本字段的内容建立一个散列值, 并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。此技术只能用于精确匹配的查询。
      • 计算散列值的方法:MD5(str)、SHA1(str)、CRC32(expr)或使用自己的应用程序逻辑,记住:数值型散列值可以很高效率地存储。
CREATE TABLE sys (id VARCHAR(100), context BLOB, hash_value VARCHAR(40));
INSERT INTO sys VALUES(1, REPEAT('beijing',2), MD5(context));
INSERT INTO sys VALUES(2, REPEAT('beijing 2008',2), MD5(context));
SELECT * FROM sys WHERE hash_value=MD5(REPEAT('beijing 2008',2)); 
+----+--------------------------+----------------------------------+
| id | context                  | hash_value                       |
+----+--------------------------+----------------------------------+
| 2  | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
+----+--------------------------+----------------------------------+
  • 若需要对BLOB或CLOB字段进行模糊查询,MySQL提供了前缀索引
CREATE INDEX idx_blob ON sys(context(100));
DESC SELECT * FROM sys WHERE context like 'beijing%';
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | sys   | ALL  | idx_blob      | NULL | NULL    | NULL |    3 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
  • (3)、在不必要时,避免检索大型的BLOB或TEXT的值。
  • (4)、把BLOB或TEXT分离到单独的表中。

(三)、浮点数与定点数

MySQL中,float、double(或real)用来表示浮点数;decimal或numberic用来表示定点数。

1、二者特点
  • 浮点型:float(m[, n]),m为“总位数”,n为“小数位数”,“截取+四舍五入”保存;若无小数位数限制,按照“总位数-1”取数据。
    • 有时使用单精度浮点数表示,会产生误差。eg:float(10,2),存入131072.32,查询时发现变成131072.31。
    • float(m, n):非标准用法,若用于数据库的迁移,不要使用。
    • 数据长度<=m。
  • 定点性:以字符串形式存放,更精确地保存数据;若实际插入值大于定义的精度,
    • 默认的SQLMode下MySQL会警告,但数据按照实际精度四舍五入后插入;
    • 传统的TRADITIONAL下,系统会直接报错,导致数据无法插入。
2、二者使用
  • 使用二者时,考虑问题:
    • 浮点数存在精度问题;
    • 对货币等对精度敏感的数据,应使用定点数标书或存储;
    • 编程中,若用浮点数,特别注意误差问题,并尽量避免做浮点数比较;
    • 注意浮点数中一些特殊值的处理。

(四)、日期类型

MySQL中,常用的日期类型有DATE、TIME、DATETIME和TIMESTAMP。
这里写图片描述

1、类型特点
  • 若超出有限制范围,默认的SQLMode下,系统会报错,并以“零值”进行存储;
+-------------+--------------------+
| DATETIME    | 0000-00-00 00:00:00|
+-------------+--------------------+
| DATE        | 0000-00-00         | 
+-------------+--------------------+
| TIMESTAMP   | 00000000000000     |
+-------------+--------------------+
| TIME        | 00:00:00           | 
+-------------+--------------------+
| YEAR        | 0000               |
+-------------+--------------------+
  • TIMESTAMP:第一个默认值CURRENT_TIMESTAMP,系统时间(插入NULL时为其)。第二个TIMESTAMP字段默认为0
    • 多个TIMESTAMP时,仅一列的默认值为CURRENT_TIMESTAMP
    • 时区相关:插入时,转化为本地时区存放;取出时,需将日期转化为本地时区后显示。
2、选择原则
  • 根据实际需求选择能够满足应用的最小存储的日期类型。
    • 若应用只需记录“年份”,用一个字节存储的YEAR足够;
    • 节约存储,提高表的操作效率。
      • 若记录年月日,通常使用DATE
      • 若记录时分秒,通常使用TIME
      • 若记录年月日时分秒,且记录年份久远,最好使用DATETIME
      • TIMESTAMP表示的日期范围要短很多。
      • 若记录的日期需让不同时区的用户使用,最好使用TIMESTAMP
      • 仅TIMESTAMP可以和实际时区对应。
      • 若经常插入或更新日期为当前系统时间,通常使用TIMESTAMP
      • TIMESTAMP值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为19个字符。
      • 若想获得数字值,应在 TIMESTAMP列添加“+0”。
        -

二、字符集

(一)、字符集

1、常用字符集比较

这里写图片描述

2、字符集的选择
  • 满足应用支持语言的需求,若应用处理各种各样的文字,或将发布到使用不同语言的国家或地区,选择Unicode字符集。对MySQL来说,目前是UTF-8;
  • 若应用涉及到已有数据导入,需充分考虑数据库字符集对已有数据的兼容性;
  • 若数据库仅需支持一般中文,性能要求也高,应选择双字节定长编码的中文字符集,eg: GBK;(编码2个字节,UCS-2,UTF-8)
  • 若数据库主要处理英文字符,仅少量汉字数据,应选择UTF-8;(编码3个字节)
  • 若数据库需要做大量的字符运算(eg: 比较、排序),选择定长字符集更好;(比变长的处理快)
  • 若所有客户端都支持相同的字符集,优先选择该字符集作为该数据库字符集。

(二)、MySQL字符集的设置

1、服务器字符集和校对规则

这里写图片描述
- 以上三种使用默认的校对规则
- 查询当前服务器的字符集和校对规则:

show variables like 'chaeacter_set_server';
2、数据库字符集和校对规则
  • 创建时指定;CHARSET
  • alter database 修改;
3、表字符集和校对规则
  • 创建时指定;CHARSET
  • alter database 修改;
4、列字符集和校对规则
5、连接字符集和校对规则

(三)、字符集的修改

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值