在 mysql 中格式化和存储电话号码-ag捕鱼王app官网

在 mysql 中格式化和存储电话号码

作者:迹忆客 最近更新:2024/03/26 浏览次数:

mysql 提供了各种方便的数据类型,用于将预期输入存储到其数据库中。了解用于存储特殊数据的正确数据类型是确保优化和高效数据库的关键。

本教程说明了 mysql 数据库中电话号码的格式和存储。


了解 mysql 数据类型

mysql 一般具有三种数据类型:

  1. 数字(intbitfloat 等)
  2. 字符串(charvarchartext 等)
  3. 日期和时间(datedatetimetimestamp 等)

这些通用数据类型还具有用于数据库中数据处理的特定情况的子类型。

查看来自 w3schools) 的关于各种 rdbms(关系数据库管理系统)数据类型的参考资料,以供进一步阅读。

在处理电话号码时,可能会很快考虑使用数字数据类型。但是,由于电话号码采用各种格式(国家代码、分隔符等)并具有特殊字符,因此可能会出现问题。

由于电话号码的长度最多为十五 (15) 位,根据国际电信联盟,字符串类型 charvarchartinytext 是最佳考虑因素。

chartinytext 的上限为两百五十五 (255) 个字符,而 varchar 使用动态内存分配来存储数据,上限为 0 到 65535 之间的定义限制。

让我们以每种数据类型的电话号码存储为例来确定最合适的选择。


在 mysql 中使用 char 存储电话号码

char 数据类型(字符的缩写)可以存储 0 到 255 个字符之间的固定长度字符串。实现 char 的列可以指定 0 到 255 之间的上限约束,并且 mysql 期望该列中的每个字符串具有相同的大小。

当输入比指定约束更短的字符串时,mysql 用空格填充剩余的空间。

例如,如果表列指定 char 数据类型,其大小约束为三十个字符 (30),则传递 10 个字符的值仍会占用 30 个字符的空间(10 个数据字符和 20 个空格)。

可以通过这个 mysql 官方文档对此进行进一步的讨论。

为了说明,让我们创建一个示例注册系统数据库。

-- initializing
createdatabasenew_registration_db;usenew_registration_db;-- creating tables
createtableregistered_users(idintauto_increment,usernamevarchar(255)notnull,emailvarchar(255),phonechar(15)notnull,primarykey(id));-- populating the table with sample registration data
insertintoregistered_users(username,email,phone)values('mark laurent','markrlaurent@teleworm.us',' 1 908-204-0495'),('patricia todd','patriciajtodd@teleworm.us',' 1 801-752-2367'),('victoria mcdonald','victoriaamcdonald@dayrep.com',' 1 608-299-8640'),('vin petrol','vin_not_diesel@crudemail.com',' 1 870-381-6967');

输出:

1 row(s) affected
0 row(s) affected
0 row(s) affected
4 row(s) affected records: 4  duplicates: 0  warnings: 0

现在,让我们预览结果表。

select*fromregistered_users;-- checking the table

输出:

id	username			email							phone
1	mark laurent		markrlaurent@teleworm.us		 1 908-204-0495
2	patricia todd		patriciajtodd@teleworm.us		 1 801-752-2367
3	victoria mcdonald	victoriaamcdonald@dayrep.com	 1 608-299-8640
4	vin petrol			vin_not_diesel@crudemail.com	 1 870-381-6967
-----------------------------------------------------------------------------------------
4 row(s) returned

在这里,由于电话号码的长度固定为 15 个字符,因此 char 数据类型将提供有效的存储。此外,它可用于过滤目的的索引。

但是,char 数据类型可能无法有效地管理使用可变大小电话号码的应用程序(全局应用程序)的内存,因为如前所述,由于填充了空格。


在 mysql 中使用 tinytext 存储电话号码

tinytext 数据类型是最小的 text 类型数据类型。它与 0 到 255 个字符之间的 char 数据类型具有相同的内存限制。

但是,与 char 不同,它可以根据其字符长度为传递的值动态分配空间。因此,对于这个存储电话号码的示例,它提供了比 char 更好的内存效率。

它确实具有没有默认值的缺点,使其不可索引以进行排序或聚合。

现在,让我们使用 tinytext 重做前面的示例。

-- creating tables
createtableregistered_users2(idintauto_increment,usernamevarchar(255)notnull,emailvarchar(255),phonetinytextnotnull,primarykey(id));-- populating the table with sample registration data
insertintoregistered_users2(username,email,phone)values('mark laurent','markrlaurent@teleworm.us',' 1 908-204-0495'),('patricia todd','patriciajtodd@teleworm.us',' 1 801-752-2367'),('victoria mcdonald','victoriaamcdonald@dayrep.com',' 1 608-299-8640'),('vin petrol','vin_not_diesel@crudemail.com',' 1 870-381-6967');select*fromregistered_users2;-- checking the table

输出:

id	username			email							phone
1	mark laurent		markrlaurent@teleworm.us		 1 908-204-0495
2	patricia todd		patriciajtodd@teleworm.us		 1 801-752-2367
3	victoria mcdonald	victoriaamcdonald@dayrep.com	 1 608-299-8640
4	vin petrol			vin_not_diesel@crudemail.com	 1 870-381-6967
-----------------------------------------------------------------------------------------
0 row(s) affected
4 row(s) affected records: 4  duplicates: 0  warnings: 0
4 row(s) returned

我们得到了预期的结果。查看此参考以获取有关 mysql tinytext 和其他 text 数据类型的更多信息。


在 mysql 中使用 varchar 存储电话号码

在 mysql 中处理电话号码的最终建议方法是使用 varchar 数据类型。当电话号码长度因数据库用户而异时,varchar 提供了动态内存分配的灵活性。

它通常分配两 (2) 个额外字节用于存储长度信息。因此,如果存储长度为六 (6) 的字符,则 varchar 需要总共分配 8 个字节的内存。

指定 varchar 数据类型的列也是可索引的,用于实现排序、聚合和主/外键约束。

让我们为电话号码分配创建第三个实现 varchar 的表。

-- creating tables
createtableregistered_users3(idintauto_increment,usernamevarchar(255)notnull,emailvarchar(255),phonevarchar(15)notnull,primarykey(id));-- populating the table with sample registration data
insertintoregistered_users3(username,email,phone)values('mark laurent','markrlaurent@teleworm.us',' 1 908-204-0495'),('patricia todd','patriciajtodd@teleworm.us',' 1 801-752-2367'),('victoria mcdonald','victoriaamcdonald@dayrep.com',' 1 608-299-8640'),('vin petrol','vin_not_diesel@crudemail.com',' 1 870-381-6967');select*fromregistered_users3;-- checking the table

输出:

id	username			email							phone
1	mark laurent		markrlaurent@teleworm.us		 1 908-204-0495
2	patricia todd		patriciajtodd@teleworm.us		 1 801-752-2367
3	victoria mcdonald	victoriaamcdonald@dayrep.com	 1 608-299-8640
4	vin petrol			vin_not_diesel@crudemail.com	 1 870-381-6967
-----------------------------------------------------------------------------------------
0 row(s) affected
4 row(s) affected records: 4  duplicates: 0  warnings: 0
4 row(s) returned

实现上述三种数据类型中的任何一种都足以处理 mysql 数据库中的电话号码。

但是,根据内存效率和速度选择最合适的数据类型取决于预期的数据库应用程序。

上一篇:在 mysql 中按 rand 排序

下一篇:

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 mysql 中声明和使用变量

发布时间:2024/03/26 浏览次数:115 分类:mysql

当你需要在 mysql 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

发布时间:2024/03/26 浏览次数:176 分类:mysql

本教程演示了如何在 mysql 中重置自动增量。

在 mysql 中实现刷新权限

发布时间:2024/03/26 浏览次数:211 分类:mysql

本教程介绍了 mysql 中的刷新权限命令,用于刷新授权表并影响允许的更改。

在 mysql 中设置时区

发布时间:2024/03/26 浏览次数:93 分类:mysql

在本教程中,我们将学习如何在 mysql 服务器中更改时区。

发布时间:2024/03/26 浏览次数:199 分类:mysql

本教程演示如何在 mysql 中转换为整数。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图