数据库
unity字符串转枚举类型
一、unity字符串转枚举类型
Unity中字符串转枚举类型的完整指南
在Unity开发中,经常会遇到需要将字符串转换为枚举类型的情况。这种转换可能是因为需要在不同模块之间传递特定类型的枚举值,或者是在处理用户输入时需要将字符串转换为枚举以便进行进一步的处理。无论是哪种情况,正确地将字符串转换为枚举类型是开发过程中不可或缺的一部分。
为什么需要将字符串转换为枚举类型?
枚举类型在Unity开发中被广泛应用,它们为开发者提供了一种便捷的方式来表示一组相关的常量数值。而字符串则是一种常见的数据格式,常用于用户输入、配置信息等方面。在很多情况下,我们需要将字符串转换为枚举类型以便更好地进行编程。
使用Unity的方法进行字符串转枚举类型
Unity提供了一些方法来帮助开发者实现字符串到枚举类型的转换。下面我们将介绍一些常用的方法。
-
Enum.Parse方法
Enum.Parse方法是C#中用于将字符串转换为枚举类型的方法,同时也适用于Unity开发。该方法接受两个参数,第一个参数是要转换的枚举类型,第二个参数是待转换的字符串。
using System; public class EnumStringConversion { public enum MyEnum { Value1, Value2, Value3 } public static MyEnum ConvertStringToEnum(string input) { return (MyEnum) Enum.Parse(typeof(MyEnum), input); } }
在上面的代码示例中,我们定义了一个枚举类型MyEnum,然后编写了一个静态方法ConvertStringToEnum,该方法使用Enum.Parse方法将字符串转换为枚举类型。
-
Enum.TryParse方法
除了Enum.Parse方法外,Unity还提供了Enum.TryParse方法来进行字符串到枚举类型的转换。Enum.TryParse方法与Enum.Parse方法的区别在于,TryParse方法会返回一个bool值表示转换是否成功,同时将转换后的枚举值存储在输出参数中。这样可以避免因转换失败引发异常。
using System; public class EnumStringConversion { public enum MyEnum { Value1, Value2, Value3 } public static MyEnum ConvertStringToEnum(string input) { MyEnum result; Enum.TryParse(input, out result); return result; } }
在上面的示例中,我们使用Enum.TryParse方法来进行字符串到枚举类型的安全转换。
-
自定义转换方法
根据实际需求,开发者也可以自定义字符串转换枚举类型的方法。这种方法适合于需要进行特殊处理或者在转换过程中加入额外逻辑的情况。
using System; public class EnumStringConversion { public enum MyEnum { Value1, Value2, Value3 } public static MyEnum CustomConvertStringToEnum(string input) { switch(input) { case "Value1": return MyEnum.Value1; case "Value2": return MyEnum.Value2; case "Value3": return MyEnum.Value3; default: return MyEnum.Value1; } } }
在上面的示例中,我们定义了一个自定义的字符串转枚举类型的方法CustomConvertStringToEnum,通过switch语句根据输入的字符串返回对应的枚举值。
总结
在Unity开发中,字符串转换为枚举类型是一项常见操作,对于处理用户输入、配置信息等具有重要意义。Unity提供了多种方法来实现这一转换,包括Enum.Parse、Enum.TryParse等方法,同时开发者也可以根据实际需求自定义转换方法。正确地将字符串转换为枚举类型不仅可以提高代码的可读性,更能避免潜在的错误。
希望本文对您有所帮助,如果您有任何疑问或建议,请随时在评论区留言,我们将竭诚为您解答。
二、45在数据库中是哪种数据类型,是整型还是字符串型?
这种单纯就看表是怎么设计的,没有标准答案。
想能计算就用整数表示度数,想精确一点就用浮点数,无非是显示给人看的时候再接个“°”。
图省事就直接带着符号按字符串读写,等需要算了再parse,只是性能可能会很不好看。
如果数据库系统支持角度这种数据类型,那自然就可以直接用。
三、sql数据库字符串如何转换成布尔类型?
String s="888"; Boolean b =new Boolean(s); b.parseBoolean(s); java.lang.Boolean.parseBoolean(String s) 解析字符串参数作为一个布尔值。返回的布尔型参数的值为true,如果字符串参数不为null,是相等的,忽略大小写字符串“true”。
四、oracle数据库里面的字符串转成数字类型?
试试用regexp_substr和connect by把字符串转成单列三行的结果集返回。
五、str字符串类型?
是的
Python(特指Python 3)中包含字符串,字符串的类型为str,字符串是Unicode码点(Unicode code codepoint)的序列,属于不可变类型。字符串有三种写法:单引号(Single quotes)、双引号(Double quotes)、三引号(Triple quoted)。单双引号可以互相嵌套,三引号可以嵌套单双引号,使得字符串扩展为多行。若要嵌套自身,需要用反斜杠转移。还可以使用str构造函数创建字符串
六、char字符串类型?
char型数据是计算机编程语言中只可容纳单个字符的一种基本数据类型,分为两种,一种是无符号整型数据类型(unsigned char),另一种是有符号整型数据类型(signed char)。
char是用于C或C++中定义字符型变量,只占一个字节,取值范围为-128 ~ +127(-2^7~2^7-1)。C语言中如int、long、short等不指定signed或unsigned时都默认为signed,但char在标准中不指定为signed或unsigned,编译器可以编译为带符号的,也可以编译为不带符号的。
七、jquery字符串转日期字符串
jQuery 字符串转日期字符串
在前端开发中,处理日期数据是非常常见的任务,而有时候我们需要将字符串类型的日期数据转换为特定格式的日期字符串。在使用 jQuery 进行前端开发时,可以利用一些方法快速实现字符串转日期字符串的功能。
步骤一:获取字符串日期
首先,我们需要确保已经获取到需要转换的字符串日期数据。这可以是从服务器端获取的数据,或是用户输入的日期字符串。假设我们有一个名为 dateString 的变量存储了需要转换的日期字符串。
步骤二:使用 jQuery 处理日期
jQuery 中没有内置的方法来直接将字符串转换为日期对象,但是我们可以借助 JavaScript 的 Date 对象来实现这一功能。首先,我们可以使用 split() 方法将日期字符串拆分为年、月、日等部分。
var dateParts = dateString.split('-');
var year = parseInt(dateParts[0]);
var month = parseInt(dateParts[1]);
var day = parseInt(dateParts[2]);
接下来,可以使用 new Date() 构造函数来创建一个日期对象,并传入拆分后的年、月、日参数。
var date = new Date(year, month - 1, day);
在这里需要注意的是,JavaScript 中的月份是从 0 开始计数的,因此在传入月份参数时需要减去 1。
步骤三:格式化日期字符串
一旦我们将字符串日期转换为日期对象,就可以利用 jQuery 提供的方法来格式化日期字符串。例如,我们可以使用 $.datepicker.formatDate 方法将日期对象格式化为指定格式的字符串。
var formattedDate = $.datepicker.formatDate('yy-mm-dd', date);
在上面的示例中,我们使用了 yy-mm-dd 的格式,可以根据需要选择不同的日期格式进行显示。
步骤四:应用转换后的日期字符串
最后,我们可以将转换后的日期字符串应用到页面中的相关元素中,例如输入框、文本显示区域等。通过将格式化后的日期字符串赋值给相应元素的值属性,可以实现界面上日期的显示。
$('#dateInput').val(formattedDate);
以上就是使用 jQuery 将字符串转换为日期字符串的简单步骤。通过这种方法,我们可以方便地处理日期数据,并将其显示在页面中,提升用户体验和数据展示的效果。
希望这些内容能帮助你更好地应用 jQuery 处理日期数据,提升前端开发效率和用户体验。如有任何疑问或建议,欢迎在下方留言讨论。
八、数据库ID类型定义?
数据类型
从本小节开始,就开始为学习如何操作记录做准备了。
我们先来学习,MySQL中常用的数据类型。
在MySQL中,我们需要了解的数据类型共有以下几种:
- 数值类型。
- 日期类型。
- 字符串类型。
- ENUM和SET类型。
我们一一来看看吧。
数值类型
MySQL支持所有标准SQL数值类型。包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
MySQL支持的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
对于小数的表示,MYSQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在mysql中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
int类型
这里我们先以int为例展开讨论。
create table t1(n1 int(4));
desc t1;
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| n1 | int(4) | YES | | NULL | |
+-------+--------+------+-----+---------+-------+
insert into t1 values(11);
insert into t1 values(111111);
select n1 from t1;
+--------+
| n1 |
+--------+
| 11 |
| 111111 |
+--------+
由最后的查看结果,我们为int类型设定的宽度为4,结果插入一个6位的也行。这是怎么回事?
create table t2(n1 int(4) zerofill);
desc t2;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| n1 | int(4) unsigned zerofill | YES | | NULL | |
+-------+--------------------------+------+-----+---------+-------+
insert into t2 values(11);
insert into t2 values(111111);
select n1 from t2;
+--------+
| n1 |
+--------+
| 0011 |
| 111111 |
+--------+
可以看到,我们在创建表的时候,为n1
字段加上zerofill
,表示不够4位就填充0。而最后的查询结果告诉我们,如果为int类型指定宽度,则是显示字符的宽度(字符数量),超过这个限制也会显示。
而查询表结构的时候,有个unsigned
,这是无符号的类型。那这是什么意思呢?
create table t3(n1 int);
desc t3;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| n1 | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
insert into t3 values(11111111111111111111111111);
insert into t3 values(-11111111111111111111111111);
select n1 from t3;
+-------------+
| n1 |
+-------------+
| 2147483647 |
| -2147483648 |
+-------------+
首先,desc告诉我们int类型的默认显示宽度是11位,而最大表示数值范围是2147483647
,如果你插入的数据是超过这个范围的话。而2147483647
的显示宽度是10位,为什么不是默认的11位呢?这是因为int类型默认类型是有符号的,而有符号的就要考虑正号和负号,而符号仅用1位就能表示。
原因如下:
int的存储宽度是4个Bytes,即32个bit,即2^32
无符号最大值为:4294967296-1
有符号最大值:2147483648-1
有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的。
那么如何设置一个无符号的呢?
create table t4(n1 int unsigned);
desc t4;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| n1 | int(10) unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
insert into t4 values(11111111111111111111111111);
select n1 from t4;
+------------+
| n1 |
+------------+
| 4294967295 |
+------------+
无符号的需要在int类型指定unsigned
。结果也是没错的。都最开始列举的表中数据一致。
最后:int类型,其实没有必要指定显示宽度,使用默认的就行;如果你的整数范围超过int类型范围,请选用别的数据类型;并且默认的,我们创建的int类型是有符号类型。
float类型
先来看定义:
FLOAT[M, D] [UNSIGNED] [ZEROFILL]
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
DECIMAL[(m[,d])] [unsigned] [zerofill]
float表示单精度浮点数(非准确小数值),M
表示数字总个数,最大值是255;D
是小数点后的数字个数,最大值30。也就是说,如果float(255,30)
意思是,小数位是30位,而整数位就不是255了,而是255-30=225位。它的精准度:随着小数的增多,精度变得不准确。
双精度(double)浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30。它的精准度:随着小数的增多,精度比float要高,但也会变得不准确。
而decimal的准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。它的精准度:随着小数的增多,精度始终准确;对于精确数值计算时需要用此类型。decaimal能够存储精确值的原因在于其内部按照字符串存储。
create table f1(weight float(256,30));
ERROR 1439 (42000): Display width out of range for column 'weight' (max = 255) # 说显示宽度超过了255
create table f2(weight float(255,31));
ERROR 1425 (42000): Too big scale 31 specified for column 'weight'. Maximum is 30. # 告诉我们小数点后的位数最多30位
create table f3(weight float(255,30)); # 这样就没问题了
desc f3;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| weight | float(255,30) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
首先,我们创建的float类型是有符号类型。
同样的,你想创建一个无符号的,也要指定unsigned
。
create table f4(weight float(255,30) unsigned);
desc f4;
+--------+------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------------+------+-----+---------+-------+
| weight | float(255,30) unsigned | YES | | NULL | |
+--------+------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
在使用浮点型的数据时,我们考虑的核心是关注它们的精度。来看对比。
create table f5(weight float(255,30) unsigned);
create table f6(weight double(255, 30) unsigned);
create table f7(weight decimal(65, 30) unsigned);
insert into f5 values(1.111111111111111111111111111111111111111111111111111);
insert into f6 values(1.111111111111111111111111111111111111111111111111111);
insert into f7 values(1.111111111111111111111111111111111111111111111111111);
我们创建三张不同类型的表,并插入一些数据,并且这些小数位都超过30位。来观察他们的精度:
select weight from f5;
+----------------------------------+
| weight |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
select weight from f6;
+----------------------------------+
| weight |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
select weight from f7;
+----------------------------------+
| weight |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
由各自的查询结果可以看到,float类型的精度只有前7位是精确的;double类型的精度是15位;而decimal则保留完整的精度,毕竟是字符串形式的存储么。 但是decimal虽然精度较高,但是它也是有限制的,因为它的数字总大小为65位,所以抛出小数位的30位,还剩30位整数位。
最后,最后,这里只是说的显示宽度仅是在int中使用,其他数据类型宽度是存储限制。比如BIT类型。
BIT
create table b1(b bit(1));
desc b1;
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| b | bit(1) | YES | | NULL | |
+-------+--------+------+-----+---------+-------+
insert into b1 values(0);
insert into b1 values(1);
insert into b1 values(2);
select b from b1;
+------+
| b |
+------+
| |
| |
| |
+------+
首先了解,字段b
的类型是bit,宽度是1,那能表示多少数值呢,一个bit,只能表示0和1两个。但是通过查询发现,跟我们想要的结果不一样。
这是为什么,bit类型存储是以二进制存储到硬盘上的。所以,我们想要查询到我们想要的值,还要借助MySQL提供给我们的函数bin()
和hex()
,意思是返回二进制值的字符串形式表示和十六进制的表示形式。
select bin(b) from b1;
+--------+
| bin(b) |
+--------+
| 0 |
| 1 |
| 1 |
select hex(b) from b1;
+--------+
| hex(b) |
+--------+
| 0 |
| 1 |
| 1 |
+--------+
可以看到,字段b
的bit(1)
类型只能表示0和1,而插入的2超出了范围。所以,你在用的时候,需要注意:
create table b2(b bit(2));
insert into b2 values(2);
select bin(b) from b2;
+--------+
| bin(b) |
+--------+
| 10 |
+--------+
可以看到,2的二进制形式是10
。
时间类型
日期类型有:
- DATE(YYYY-MM-DD(1000-01-01/9999-12-31)),2019-07-31,出生年月日
- TIME(HH:MM:SS('-838:59:59'/‘838:59:59’)),16:40:40,下班时间
- DATETIME(YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y))、2019-07-31 16:40:40,注册时间、文章发布时间、员工入职时间
- TIMESTAMP(YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时))、2019-07-31 16:40:40
- YEAR(YYYY(1901/2155))、2019,历史大事件,出生年
来个示例:
create tabled1(
born_date date,
get_time time,
reg_time datetime,
born_year year # 最后一个字段后面不要有逗号
);
insert into d1 values(
'1999-11-11',
'18:30:00',
'2018-11-11 11:11:11',
'1999' # 不要写成18/30/30
);
来查询:
desc d1;
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| born_date | date | YES | | NULL | |
| get_time | time | YES | | NULL | |
| reg_time | datetime | YES | | NULL | |
| born_year | year(4) | YES | | NULL | |
+-----------+----------+------+-----+---------+-------+
select * from d1;
+------------+----------+---------------------+-----------+
| born_date | get_time | reg_time | born_year |
+------------+----------+---------------------+-----------+
| 1999-11-11 | 18:30:00 | 2018-11-11 11:11:11 | 1999 |
+------------+----------+---------------------+-----------+
再来掌握一个now()
函数:
insert into d1 values(now(), now(), now(), now());
select * from d1;
+------------+----------+---------------------+-----------+
| born_date | get_time | reg_time | born_year |
+------------+----------+---------------------+-----------+
| 1999-11-11 | 18:30:00 | 2018-11-11 11:11:11 | 1999 |
| 2019-07-31 | 16:57:51 | 2019-07-31 16:57:51 | 2019 |
由第二行记录可以发现,各类型都按照自己的规则截取所需的日期数据。
了解:datetime与timestamp的区别
create table d2(x datetime, y timestamp);
desc d2;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| x | datetime | YES | | NULL | |
| y | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
insert into d2 values(Null, Null);
insert into d2 values('1111-11-11','1111-11-11');
select * from d2;
+---------------------+---------------------+
| x | y |
+---------------------+---------------------+
| NULL | 2019-07-31 17:05:43 |
| 1111-11-11 00:00:00 | 0000-00-00 00:00:00 |
+---------------------+---------------------+
通过上述验证分析,虽然这两种日期格式,都能满足我们大多数使用场景,但是在某些情况下,它们也有自己的优劣之分,来看看它们的区别:
- DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
- DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。
- DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
- DATETIME的默认值为null,TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。
字符串类型
字符串类型这里需要重点掌握的就是char和varchar两个,存放名字、性别、密码、文本内容等等。
先看它们的区别,注意,长度指的是字符的长度:
- char,定长,简单粗暴,浪费空间,存取速度快。
- 字符长度范围:0~255,一个汉字是一个字符,utf8编码一个普通汉字占用3个字节。
- 存储:如果存储的值,不满足指定的长度时,会往右填充空格来满足长度,例如指定长度为10,存储大于10个字符报错,小于10个字符会用空格填充,凑够十个字符。
- 查询(或称检索):查询出的结果会自动删除尾部的空格,除非我们打开
pad_char_to_full_length
SQL模式
set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'
- varchar,可变长度,存储更精确,但存取速度慢。
- 字符长度范围:0-65535,在utf8编码中,如果大于21844会提示用其他类型 。mysql行最大限制为65535字节。
- 存储:varchar类型存储的是真实内容,而不是用空格填充,如存储
abc
,尾部的空格也会被存储起来。注意,varchar类型会在真实数据前面加1~2个Bytes前缀,用来存储真实数据的bytes字节数,1~2Bytes最大表示65535个数字,正好符合MySQL对row的最大字节限制。如果真实的数据小于255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255);如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)。 - 查询:尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容。
char VS varchar:存储范围验证
create table c1(s char(256));
ERROR 1074 (42000): Column length too big for column 's' (max = 255); use BLOB or TEXT instead
create table c2(s char(255));
create table c3(s varchar(21845));
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
create table c4(s varchar(21844));
create table c5(s varchar(65534));
通过打印结果,可以看到,char类型,如果长度超过255,就提示我们字段长度最大是255;varchar的列长度如果超过21844,提示我们varchar类型的最大行大小为65535。
但是最后的c5
却成功创建,这是为什么呢?我们来看它的表结构:
desc c4;
+-------+----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------+------+-----+---------+-------+
| s | varchar(21844) | YES | | NULL | |
+-------+----------------+------+-----+---------+-------+
desc c5;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| s | mediumtext | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
可以看到,c5
表的字段类型已经变成了mediumtext
,而不是varchar
类型。
char VS varchar:存储长度验证
create table c6(s char(3));
create table c7(s varchar(3));
insert into c6 values('abcd');
insert into c6 values('生存还是毁灭');
insert into c7 values('abcd');
insert into c7 values('生存还是毁灭');
再来看查询结果:
select s from c6;
+-----------+
| s |
+-----------+
| abc |
| 生存还 |
+-----------+
select s from c7;
+-----------+
| s |
+-----------+
| abc |
| 生存还 |
+-----------+
可以看到,无论是char还是varchar;无论是中文还是其他,它们限制的是字符个数。
char VS varchar:定长与可变长度
再来研究它们之间的特点的区别,也就是定长和可变长度的区别。
我们通过表格来看看他们的存储关系:
Value | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
---|
不要被5bytes所迷惑,abcd
占4个字节,还有一个字节存储该字符串的长度。
先了解两个函数:
- length:查看字节数。
- char_length:查看字符数。
create table c8(s1 char(3), s2 varchar(3));
desc c8;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| s1 | char(3) | YES | | NULL | |
| s2 | varchar(3) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
insert into c8 values('a', 'b');
select s1, s2 from c8;
+------+------+
| s1 | s2 |
+------+------+
| a | b |
+------+------+
现在看是啥也看不出来,所以,我们用上char_length
函数:
select char_length(s1), char_length(s2) from c8;
+-----------------+-----------------+
| char_length(s1) | char_length(s2) |
+-----------------+-----------------+
| 1 | 1 |
+-----------------+-----------------+
这也看不出来啥呀,a和b不就是各占用一个字符长度么。
这是因为啊,我们在查询char类型数据的时候,MySQL会默默的删除尾部的空格(装作我并没有浪费空间!),我们来让它现原形:
SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
select char_length(s1), char_length(s2) from c8;
+-----------------+-----------------+
| char_length(s1) | char_length(s2) |
+-----------------+-----------------+
| 3 | 1 |
+-----------------+-----------------+
这个时候再看,是不是现原形了,char类型占用指定的3个字符宽度,当然,一个英文字符也占用一个字节。而varchar就占用一个字符。
中文也一样:
insert into c8 values('你', '好');
select char_length(s1), char_length(s2) from c8;
+-----------------+-----------------+
| char_length(s1) | char_length(s2) |
+-----------------+-----------------+
| 3 | 1 |
| 3 | 1 |
+-----------------+-----------------+
这就是我们使用char和varchar时需要注意的点。
小结:
InnoDB存储引擎:建议使用VARCHAR类型 单从数据类型的实现机制去考虑,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。
但对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列性能要好。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。 其他字符串系列(效率:char>varchar>text)
- TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
- BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
- BINARY系列 BINARY VARBINARY
text:text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
枚举与集合
有些情况,我们需要在一堆选项中选择一个,或者选择多个,如单选框和复选框。 那,在MySQL的字段中,字段的类型也可以有单选和多选。
- enum单选,只能在给定范围内选一个值,如果性别;适用于给定范围后续不会发生变化的场景;另外数字类型不适用枚举。
- set多选,在给定的范围聂选择多个值,如爱好。
create table user1(
id int,
name char(5),
sex enum('male', 'female', 'unknow'),
hobby set('eat', 'sleep', 'play mobile phone')
);
desc user1;
+-------+----------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------------------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(5) | YES | | NULL | |
| sex | enum('male','female','unknow') | YES | | NULL | |
| hobby | set('eat','sleep','play mobile phone') | YES | | NULL | |
+-------+----------------------------------------+------+-----+---------+-------+
insert into user1 values(1, '张三', 'male', 'eat,sleep');
select * from user1;
+------+-----------+------+-----------+
| id | name | sex | hobby |
+------+-----------+------+-----------+
| 1 | 张三 | male | eat,sleep |
+------+-----------+------+-----------+
如果是set类型,多个参数以逗号隔开。 这里,我们也可以设置默认值,如果用户不填写的话:
create table user2 (id int, sex enum('male', 'female', 'unknow') default 'male');
insert into user2(id) values(1);
insert into user2 values(2, 'female');
select * from user2;
+------+--------+
| id | sex |
+------+--------+
| 1 | male |
| 2 | female |
+------+--------+
根据查询结果可以看到,如果性别字段传值就用我们传的值,不传就用默认的。
九、jquery 字符串json数组转字符串
在Web开发中,前端开发工程师经常需要处理数据格式的转换,其中涉及到将 JSON 数组转换为字符串或者字符串转换为 JSON 数组的操作。jQuery 是一种流行的JavaScript库,提供了方便快捷的方法来处理这些数据转换操作。
将 JSON 数组转换为字符串
要将 JSON 数组转换为字符串,可以使用 jQuery 提供的方法来实现。例如,假设有以下 JSON 数组:
[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 35}]
可以使用 jQuery 的 JSON.stringify() 方法将其转换为字符串:
var jsonArray = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 35}];
var jsonString = JSON.stringify(jsonArray);
console.log(jsonString);
上述代码将输出以下字符串:
"[{"name":"Alice","age":30},{"name":"Bob","age":25},{"name":"Charlie","age":35}]"
将字符串转换为 JSON 数组
与上述相反,如果需要将字符串转换为 JSON 数组,也可以利用 jQuery 提供的方法来实现。假设有以下字符串:
var jsonString = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 35}]';
可以使用 jQuery 的 JSON.parse() 方法将其转换为 JSON 数组:
var jsonArray = JSON.parse(jsonString);
console.log(jsonArray);
上述代码将输出以下 JSON 数组:
[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 35}]
结论
通过使用 jQuery 提供的 JSON.stringify() 和 JSON.parse() 方法,可以方便快捷地实现 JSON 数组和字符串之间的转换。这些方法在实际前端开发中经常被用到,能够帮助开发人员处理数据格式转换的需求。
希望通过本文的介绍,您对于如何使用 jQuery 进行字符串和 JSON 数组之间的转换有了更清晰的认识。
十、mysql数字转字符串
MySQL 数字转字符串的几种方法
MySQL 是一种流行的关系型数据库管理系统,广泛应用于各种网站和应用程序中。在实际开发过程中,我们经常需要将数字类型转换为字符串类型。本文将介绍几种在 MySQL 中实现数字转字符串的方法。
方法一:使用 CAST 函数
MySQL 提供了 CAST 函数用于将数据类型转换为指定的类型。要将数字转换为字符串,可以使用 CAST 函数,并指定需要转换的字段及目标数据类型。
SELECT CAST(number_column AS CHAR) AS string_column
FROM table_name;
上述语句中,number_column 表示要转换的数字字段,string_column 表示转换后的字符串字段,table_name 则表示数据来源的表名。通过这种方式,我们可以将数字字段转换为字符串字段,并进行查询和显示。
方法二:使用 CONCAT 函数
除了使用 CAST 函数,MySQL 中的 CONCAT 函数也可以用来将数字转换为字符串。CONCAT 函数用于连接两个或多个字符串。
SELECT CONCAT('', number_column) AS string_column
FROM table_name;
上述语句中,number_column 表示要转换的数字字段,string_column 表示转换后的字符串字段,table_name 则表示数据来源的表名。通过使用 CONCAT 函数,我们可以将一个空字符串与数字字段进行连接,从而将其转换为字符串。
方法三:使用 FORMAT 函数
在 MySQL 中,还可以使用 FORMAT 函数将数字转换为带有千位分隔符的字符串。FORMAT 函数可接受两个参数:待格式化的数字和小数点后的位数。
SELECT FORMAT(number_column, 0) AS string_column
FROM table_name;
上述语句中,number_column 表示要转换的数字字段,string_column 表示转换后的字符串字段,table_name 则表示数据来源的表名。通过指定小数点后的位数为 0,我们可以得到不带小数的千位分隔符字符串。
方法四:使用 LPAD 函数
LPAD 函数可在左侧填充指定的字符,将数字转换为固定长度的字符串。
SELECT LPAD(number_column, length, '0') AS string_column
FROM table_name;
上述语句中,number_column 表示要转换的数字字段,length 表示转换后字符串的长度,string_column 表示转换后的字符串字段,table_name 则表示数据来源的表名。通过指定填充的字符为 '0',我们可以将数字转换为固定长度的字符串,并在左侧填充 '0'。
方法五:使用 SUBSTRING 函数
在 MySQL 中,还可以使用 SUBSTRING 函数将数字转换为字符串。SUBSTRING 函数可用于提取字符串中的一部分,通过指定起始位置和长度来截取字符串。
SELECT SUBSTRING(number_column, 1, LENGTH(number_column)) AS string_column
FROM table_name;
上述语句中,number_column 表示要转换的数字字段,string_column 表示转换后的字符串字段,table_name 则表示数据来源的表名。通过指定起始位置和长度为字段本身的长度,我们可以提取整个数字字段,实现数字转换为字符串。
总结而言,MySQL 提供了多种方法将数字转换为字符串,开发者可以根据需求选择合适的方法。通过 CAST、CONCAT、FORMAT、LPAD 和 SUBSTRING 函数,我们可以轻松地实现数字转字符串的操作,提高开发效率。
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...