这里给个实际项目中的案例:
项目中将之间的一个表重构,id用雪花id,数据库字段类型为bigint。但是有关该表的外键都没改,还是之前的varchar类型。
问题:外键关联查询时报错
Data truncation: Truncated incorrect DOUBLE value: 'xxxxxxxxxx'
原因是:mysql把
bigint
类型转到
varchar
时,精度丢失了
注意:此时用
concat(111,
''
),将bigint转称varchar也会报错,
原因是,用
concat()函数转是把数字和字符串连在一起
。
而用
cast
(111
as
char
)、
convert(
111
,
char
)
就不会报错
二、String转double
1、select cast("111.11" as decimal(10,2));
2、select convert("111.11",decimal(10,2);
注:cast()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值一、int转string1、cast()函数selectcast(111aschar);2、convert()函数selectconvert(111,char)3、concat()函数selectconcat(111,'');这里给个实际项目中的案例:项目中将之间的一个表重构,id用雪花id,数据库字段类型为bigint。但是有关该表的外键都没改,还...
mysql
数据库中
int
类型数据查询出来以后变为了
string
类型
今天在lnmp环境下搭建了一个网站,发现从数据库中查询出来的数据由
int
类型变为了
string
我在网上搜了搜 发现是没有安装
mysql
nd模块的
网上讲解了很多的原理 这里就不说了,上干货,我的解决流程
查询php安装的模块
php -m
这张图片是我安装过后的,原来没有
mysql
nd的
2.卸载php-
mysql
因为
mysql
nd是
mysql
原生的驱动,如果已经安装了php-
mysql
,需要先卸载,否则会遇到冲突。
我刚开始就
mysql
是可以直接对
int
字段传
string
类型的参数的
Mysql
会将传入的
string
(要赋值给
int
字段的)从左到右的第一个非数值开始,将后面的字符串
转
成0,在和数值类型相加,select * from table where id='12abc'等效于select * from table where id=12
insert、select、update、delete都可以
但注意,像UUID这种就不能这么搞了,因为里面带字母;
还有,where条件中的表达式最好要符合字段的数据类型,比如in
问题描述:
最近做一个功能,实现对
MYSQL
数据库表数据进行同表复制插入操作,在将拷贝后的数据插入原表时,为了避免主键冲突,需要对其主键进行处理(目前是取原表最大id+伪造了一个rownum进行处理),原始主键是big
int
类型的,进行运算之后变成了科学计数法,如下:
SELECT (select max(id) from test) + (@rownum:=@rownum+1) id
from (SELECT @rownum:=0) r,test where tenant_id =10000
Asc(
String
) 取得字符串表达式的第一个字符ASCII 码。
Atn(number) 取得一个角度的反正切值。
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。
CBool(expression)
转
换表达式为Boolean 型态。
CByte(expression)
转
换表达式为Byte 型态。
CChar(expression)
转
换表达式为字符型态。
CDate(expression)
转
换表达式为Date 型态。
CDbl(expression)
转
换表达式为Double 型态。
CDec(expression)
转
换表达式为Decimal 型态。
C
Int
(expression)
转
换表达式为
Int
eger 型态。
CLng(expression)
转
换表达式为Long 型态。
CObj(expression)
转
换表达式为Object 型态。
CShort(expression)
转
换表达式为Short 型态。
CSng(expression)
转
换表达式为Single 型态。
CStr(expression)
转
换表达式为
String
型态。
Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。
Chr(charcode) 以ASCII 码来取得字符内容。
Close(filenumberlist) 结束使用Open 开启的档案。
Cos(number) 取得一个角度的余弦值。
Ctype(expression, typename)
转
换表达式的型态。
DateAdd(date
int
erval, number, datetime) 对日期或时间作加减。
DateDiff(date
int
erval, date1, date2) 计算两个日期或时间间的差值。
DatePart (date
int
erval, date) 依接收的日期或时间参数传回年、月、日或时间。
DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。
DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。
Day(datetime) 依接收的日期参数传回日
MyISAM表中行的最大大小为65,534字节。每个BLOB和TEXT列 账户只占其中的5至9个字节。
如果MyISAM表包括变长列类型,记录格式也是可变长度。当创建表时,在某些条件下,
MySQL
可以将一个列从变长类型改为固定长度的类型或反之亦然。详细信息参见13.1.5.1节,“沉寂的列规格变更”。
数值类型存储需求
TINY
INT
SMALL
INT
MEDIUM
INT
INT
,
INT
EGER
BIG
INT
FLOAT(p)
如果0 <= p <= 24为4个字节, 如果25 <= p <= 53为8个字节
FLOAT
DOUBLE [PRECISION], item REAL
DECIMAL(M,D), NUMERIC(M,D)
变长;参见下面的讨论
BIT(M)
大约(M+7)/8个字节
DECIMAL(和NUMERIC)的存储需求与具体版本有关:
使用二进制格式将9个十进制(基于10)数压缩为4个字节来表示DECIMAL列值。每个值的整数和分数部分的存储分别确定。每个9位数的倍数需要4个字节,并且“剩余的”位需要4个字节的一部分。下表给出了超出位数的存储需求:
日期和时间类型的存储需求
DATETIME
TIMESTAMP
字符串类型的存储需求
CHAR(M)
M个字节,0 <= M <= 255
VARCHAR(M)
L+1个字节,其中L <= M 且0 <= M <= 65535(参见下面的注释)
BINARY(M)
M个字节,0 <= M <= 255
VARBINARY(M)
L+1个字节,其中L <= M 且0 <= M <= 255
TINYBLOB, TINYTEXT
L+1个字节,其中L < 28
BLOB, TEXT
L+2个字节,其中L < 216
MEDIUMBLOB, MEDIUMTEXT
L+3个字节,其中L < 224
LONGBLOB, LONGTEXT
L+4个字节,其中L < 232
ENUM('value1','value2',...)
1或2个字节,取决于枚举值的个数(最多65,535个值)
SET('value1','value2',...)
1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员)
VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。例如,VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节。对于字符串'abcd',L是4,存储需要5个字节。
对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节。
要想计算用于保存具体CHAR、VARCHAR或者TEXT列值的字节数,需要考虑该列使用的字符集。在具体情况中,当使用Unicode时,必须记住所有Unicode字符使用相同的字节数。为了细分用于不同类Unicode字符使用的存储,参见10.5节,“Unicode支持”。
注释:VARCHAR列的有效最大长度为65,532字符。
NDBCLUSTER引擎只支持固定宽度的列。这说明
MySQL
簇中的表中的VARCHAR列的行为如同类型CHAR(不同的是每个记录仍然有一个额外字节空间)。例如,在Cluster表中,声明为VARCHAR(100)的列中的每个记录存储时将占用101个字节,无论实际存储的记录中的字符串的长度为多少。
BLOB和TEXT类需要 1、2、3或者4个字节来记录列值的长度,取决于该类的最大可能的长度。参见11.4.3节,“BLOB和TEXT类型”。
在NDB Cluster存储引擎中,TEXT和BLOB列的实施是不同的,其中TEXT列中的每个记录由两个单独部分组成。一个是固定大小(256字节),并且实际上保存在原表中。另一个包括超出256字节的任何数据,保存在隐含的表中。第2个表中的记录总是2,000字节长。这说明如果size<= 256,TEXT列的大小为256(其中size表示记录的大小);否则,大小是256 +size+(2000–(size–256)%2000)。
ENUM对象的大小由不同的枚举值的数目确定。枚举用一个字节,可以有255个可能的值。当枚举的值位于256和65,535之间时,用两个字节。参见11.4.4节,“ENUM类型”。
SET对象的大小由不同的set成员的数量确定。如果set大小是N,对象占(N+7)/8个字节,四舍五入到1、2、3、4或者8个字节。SET最多可以有64个成员。参见11.4.5节,“SET类型”。
MySQL
提供的数据类型包括:
1. 数值类型(Numeric Types):包括整型(
INT
、TINY
INT
、SMALL
INT
、MEDIUM
INT
、BIG
INT
)、浮点型(FLOAT、DOUBLE、DECIMAL)等。
2. 日期和时间类型(Date and Time Types):包括DATE、TIME、DATETIME、TIMESTAMP、YEAR等。
3. 字符串类型(
String
Types):包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。
4. 布尔类型(Boolean Type):包括BOOL、BOOLEAN。
5. 位类型(Bit-Value Types):包括BIT。
6. 数据库存储类型(Spatial Data Types):包括GEOMETRY、PO
INT
、LINE
STRING
、POLYGON、MULTIPO
INT
、MULTILINE
STRING
、MULTIPOLYGON、GEOMETRYCOLLECTION等。
7. JSON类型(JSON Data Type):包括JSON。
其中,整型、日期和时间类型、字符串类型、布尔类型是
MySQL
中最常用的数据类型。
springboot:redis报错io.lettuce.core.RedisCommandExecutionException: ERR Client sent AUTH, but no passw
73183
【git】idea使用update提示Can't Update No tracked branch configured for branch master or the branch doe...
vue 使用 sortablejs 拖着el-table行,使行顺序修改
tzpkd:
原始GPS坐标(WGS-84)转成百度的经纬度,零误差
小洁癖Jieie:
原始GPS坐标(WGS-84)转成百度的经纬度,零误差
MCNS_37: