哪种MySQL数据类型最适合存储平均评分值,例如IMDB上的电影评分?float,十进制?或者,如果我在PHP中将实际值四舍五入到小数点后两位并将其保存为INT(8.323243->8.32->832),它可能会工作得更快? 最佳答案 你不关心精度,所以没必要用小数。如果只想使用整数,请使用int。否则,使用float或double。在PHP中首先对其进行四舍五入对您没有任何好处。在PHP中将它在int和double之间转换比在数据库中存储double要慢。 关于mysql-如何在MyS
我的客户给了我一个电子商务项目来修复一些错误。较早的愚蠢开发人员在产品表中给价格字段VARCHAR数据类型而不是非常明显的INTEGER数据类型,因此下一组开发人员为了根据价格范围进行搜索使用CAST(价格为十进制)。现在,我是第三个研究这个的人,我发现这个CASTASDECIMAL的东西并不奇怪只适用于0-500的价格范围,但适用于所有其他价格范围,如500-1000、1000-2000等等.查询是这样的:目前的查询是:SELECT*FROMtbl_productwherestatus=1andsubcat_id='128'andprice>'0'andprice这是以某种方式搜索价
我知道这是一个愚蠢的问题,但是否可以只更改十进制值的整数部分。例如,假设我有数字12.34,那么我只想更改12,而.34保持原样。我有两张table。表X和表YTableXid(int)|value(decimal)-------|--------1|12.432|3.543|102.07TableYid(int)|value(int)-------|--------1|322|763|8我想要如下所示的结果表xTableXid|value------|--------1|32.432|76.543|8.07用表Y的值替换表X的值的int部分。在mysql中有可能吗?(没有任何函数调用
我创建了一个MySQL函数来确定一组经纬度坐标是否在另一组经纬度坐标的特定范围内。但是,该函数给我一个语法错误,所以我无法测试它是否正常工作。任何帮助找出导致错误的原因将不胜感激。该函数及其描述如下:它的工作原理是将起始纬度/经度坐标传递给函数。数据库包含行targa、targb和targc,它们分别包含要比较的纬度、经度和范围。数据库中的targ列指定是否应检查此行的纬度/经度范围。CREATEFUNCTIONinrange(lat1decimal(11,7),lon1decimal(11,7))READSSQLDATARETURNSINT(1)BEGINDECLAREdistanc
销售编号=12product_rate=2090.00making_charge=83.60handling_charge=0.00都是decimal(10,2)类型。我的查询是SELECTSUM(making_charge+product_rate+handling_charge)AStax_tournFROM`sales_details`WHERE`sales_id`=12我得到的结果是tax_tourn=10784.40这是不对的2090.00+83.60+0.00=2173.60为什么mysql显示错误答案?新增详情我有两个表sales和sales_details。sales_
正如通常讨论的那样,(例如此处Storing0.00001inMySQL)DECIMAL数据类型应该用于需要精度/正确性的字段,例如帐户余额。但是我想知道,PHP如何处理这些值,如果它们在内部作为float处理,从数据库读取这些值、进行一些计算并再次将它们写回时是否仍然存在问题。如果是这样,我们如何才能强制PHP保持精确度? 最佳答案 该变量最初在PHP中可能是一个字符串(当从MySQL结果对象读取时)。通常,不能依赖PHP的float据类型来保持所需的精确十进制值。您应该使用任意精度的数学库,例如GMP.(当您获取结果对象的一行时
在mysql5.1中,我有一个包含两列的表createtablet1{pricedecimal(6,2),quantitytinyint(4),...}在我正在做的选择查询中selectsum(price*quantity)fromt1groupby...这个计算是精确计算吗(使用定点运算)?还是我需要担心舍入/精度损失等问题? 最佳答案 我相信小数乘以整数没有精确的损失。参见PrecisionMathExamples.我还做了一个小实验来了解float和小数之间的区别:SELECT.1E0*.1E0,.1*.1,(.1E0*.1E
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭去年。Improvethisquestion我尝试建立支付系统。客户可以使用比特币或其他货币进行购买,例如(美元,欧元)我有一个带有(16,8)的十进制金额列,对于比特币金额它正常工作,但是当我尝试输入美元值(value)例如100美元时,它变成100.00000000,我的问题是应该像这样存储数量吗?对比特币和其他货币使用相同的十进制列?计算所有记录时对性能不利吗?或者我应该为比特币小数点(16,8)和其他货币小数点数(10,2)设
我的一个friend说,他们在使用decimal列存储货币格式时遇到了一些奇怪的事情,例如保存1000.00会导致它被存储为999.99。不过我刚刚测试过,1000.00在decimal(19,4)/MySQL5上存储为1000.0000。任何人都可以深入了解他们可能遇到问题的原因吗?可能是MySQL的一个老bug,应用端计算不当才存入数据库?这是一个ROI字段,我正在存储可能高达数千的货币值,仅供引用。 最佳答案 您应该使用DECIMAL数据类型来表示精确的数字,而不是DOUBLE。引用自MySQLDocumentationonN
使用MySQL5.0.27这个查询:SELECTCAST('543.21'ASDECIMAL(100,2))返回543.21这个也是:SELECTCAST('543.21'ASDECIMAL(2,2))事实上,我很难弄清楚参数有什么影响。我正在使用它来聚合varchar列中的数值(出于遗留原因!!)并四舍五入到小数点后两位。我应该只选择一个高数字吗? 最佳答案 它描述了一个字段(或变量)能够存储的总位数。DECIMAL(100,2)-总共100位数字,小数点分隔符前98位,小数点分隔符后2位DECIMAL(2,2)总位数,小数点前0