MySQL arithmetic calculation result differs between Windows and Linux - mysql

I have run this sql in windows & Linux version of mysql, and get the different result:
select (((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)+
(0.50*`(((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+
((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))
-(((((360.00*((1527268.4000-1182208.5700)-((2587.0000-((5354427.3100*0.0400*6)/12.00))
+99354.4800+10550.5600)))/((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+
((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))*0.5))-(0.50*((2587.0000-
((5354427.3100*0.0400*6)/12.00))+99354.4800+10550.5600)))*
(((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+
((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6)))/1182208.5700))-
((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)))) AS YF`
Windows version of mysql result: 105.93639914104807268662689486
Linux version of mysql result: 144.43789669025999363208811782
And I've been check this expression in some of other platform like java, excel, get the approximately value about: 105.93....., so I thought about that the calculation on linux mysql is incorrect or some of mysql variable set incorrect? Can anybody tell me why?
my linux version of mysql (At cloud server):
mysql>SHOW VARIABLES LIKE "%version%"
+-------------------------+---------------------------------+
| Variable_name | Value |
+-------------------------+---------------------------------+
| innodb_version | 1.1.8-20.1 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.18.1-Alibaba-rds-201406-log |
| version_comment | Source distribution |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+---------------------------------+

I did not look closely, but you are not selecting FROM anywhere
try this:
select (((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)+(0.50*(((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))-(((((360.00*((1527268.4000-1182208.5700)-((2587.0000-((5354427.3100*0.0400*6)/12.00))+99354.4800+10550.5600)))/((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))*0.5))-(0.50*((2587.0000-((5354427.3100*0.0400*6)/12.00))+99354.4800+10550.5600)))*(((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6)))/1182208.5700))-((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)))) AS YF
FROM DUAL
Answer: 105.936399141048
Fiddle: http://sqlfiddle.com/#!2/a2581/32503/0

Related

mysql select count(*) results in Data too long for column

I am running a count(*) on a view, but I get the following error. The view has several joins and views. But this error should only apply when changing a value on a table field, right?
mysql> select count(*) from dm.vSscore24 ;
ERROR 1406 (22001): Data too long for column 'pbs' at row 1
mysql>
db info
mysql> show variables like '%version%';
+-------------------------+-----------------------------+
| Variable_name | Value |
+-------------------------+-----------------------------+
| innodb_version | 5.7.20 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1 |
| version | 5.7.20-0ubuntu0.16.04.1-log |
| version_comment | (Ubuntu) |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+-----------------------------+
thank you.
found the issue.
It was a function called inside a view that had a variable (named pbshape) too small for the maximum size of the column.
Luckily there were no columns named 'pbs' anywhere (in tables or views), and that made me wonder.
If the variable were named like bs I think I would never have found the answer :P
The word column in the error message 'Data too long for column' is extremely missleading.
thank you guys

PHPMyAdmin | Event Scheduler cannot enabled and get #1577 error

I've stuck on this problem for a while.
I need to schedule a job for my query daily so I have to set global event_scheduler = ON
and I got this message ..
1577 - Cannot proceed because system tables used by Event Scheduler were found damaged at server start
some guys told me i have to restart db and do it again but it's not work.
I was going to my.cnf and type event_scheduler = ON in [mysqld] section and restart again
and it's still DISABLED.
someone told me it's a bug of version 5.5 but i'm using 5.6 .....
MariaDB [(none)]> SHOW VARIABLES LIKE "%version%";
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| innodb_version | 5.6.22-72.0 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 10.0.17-MariaDB |
| version_comment | Source distribution |
| version_compile_machine | i386 |
| version_compile_os | osx10.6 |
| version_malloc_library | system |
+-------------------------+---------------------+
so I have no any idea what should i do with this thing :(
I also can't access the EVENT table in information_schema db with the same error.
if anyone can solve my problem. i'll owe you guys my entire life.
** i sincerely apologise if it's a stupid question **
Ps. I use XAMPP.
It is generally a good idea to research error codes and messages:
https://serverfault.com/questions/385015/mysql-damaged-system-tables
https://serverfault.com/questions/562282/mysqldump-error-1557-corrupt-event-table
https://serverfault.com/questions/100685/cannot-proceed-because-system-tables-used-by-event-scheduler-were-found-damaged
https://bugs.mysql.com/bug.php?id=70975

Mysql Source Distribution Version

According to this, there are only two MySQL version
Community
Enterprise
However the version that I installed from my CentOS repo, It is "Source Distribution"
mysql> show variables like '%version%';
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| protocol_version | 10 |
| version | 5.1.73 |
| version_comment | Source distribution |
| version_compile_machine | x86_64 |
| version_compile_os | redhat-linux-gnu |
+-------------------------+---------------------+
5 rows in set (0.01 sec)
I get that as I installed it via repo, it is stating "Source Distribution", but where does it fall in legal terms ?
Sorry for trouble guys. I found my answer.
After googling, found out it is just like community version, the only difference is, it is compiled and maintained by repo.

MySQL: lower does not exist

I am trying to run a query like this:
SELECT lower (A.label) FROM addresses A;
and what I get in return is
ERROR 1305 (42000): FUNCTION db.lower does not exist
I am using
+-------------------------+-------------------------------+
| Variable_name | Value |
+-------------------------+-------------------------------+
| protocol_version | 10 |
| version | 5.0.92-community |
| version_comment | MySQL Community Edition (GPL) |
| version_compile_machine | x86_64 |
| version_compile_os | unknown-linux-gnu |
+-------------------------+-------------------------------+
Never had this issue before on any other system but this one... I was under the impression that lower is an internal function and is always there. What can be wrong?
Delete the space between lower and (
SELECT lower(A.label) FROM addresses A;
lower (A.label)
should be
lower(A.label)
MySQL doesn't like spaces between function name and argument: you are implying a column alias
(A.label) for a column lower otherwise
lower `(A.label)`
lower AS `(A.label)`

InnoDB Plugin Version command?

Is there any way to make MySQL tell you what version of the InnoDB plugin it's running? I know you can look at the documentation, but I'm trying to verify a potential bug if the plugin jives with the mysql version installed.
mysql> show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name | Value |
+-------------------------+------------------------------+
| protocol_version | 10 |
| version | 5.1.50-community-log |
| version_comment | MySQL Community Server (GPL) |
| version_compile_machine | x86_64 |
| version_compile_os | unknown-linux-gnu |
+-------------------------+------------------------------+
I found the answer, so I'll pass this along.
1.You must be running the InnoDB plugin instead of the built-in mysql innodb. To do this, you must make these config changes to your my.cnf:
ignore_builtin_innodb
plugin-load = innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.so;innodb_locks=ha_innodb_plugin.so;innodb_lock_waits=ha_innodb_plugin.so;innodb_cmp=ha_innodb_plugin.so;innodb_cmp_reset=ha_innodb_plugin.so;innodb_cmpmem=ha_innodb_plugin.so;innodb_cmpmem_reset=ha_innodb_plugin.so
innodb_fast_shutdown = 0
Note: Load individual plugins, but make sure no spaces between the ";". Also innodb_fast_shutdown is optional, but recommended.
2.You must restart mysqld to take the new config changes.
3.Using your SQL interface, execute: "SELECT ##innodb_version;"
mysql> SELECT ##innodb_version;
+------------------+
| ##innodb_version |
+------------------+
| 1.0.11 |
+------------------+
1 row in set (0.00 sec)
Reference URLs:
Getting the version:
http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_version
Using the plugin engine
http://dev.mysql.com/doc/refman/5.1/en/replacing-builtin-innodb.html
When you have installed InnoDB Plugin you can check out the version by performing the following commands
SELECT * FROM information_schema.plugins;
SELECT ##innodb_version;