MySQL: lower does not exist - mysql

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)`

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

Parsing json data in Mysql

I am using Mysql version as follows:
mysql> SHOW VARIABLES LIKE "%version%"
->
-> ;
+-------------------------+------------------------------+
| Variable_name | Value |
+-------------------------+------------------------------+
| innodb_version | 5.6.26 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.6.26 |
| version_comment | MySQL Community Server (GPL) |
| version_compile_machine | x86_64 |
| version_compile_os | osx10.8 |
+-------------------------+------------------------------+
7 rows in set (0.00 sec)
I have a table named tag and inside it, I have a text column namedtagconfig. This column has JSON data as stored as string as the following:
{ "option":{ "secure":"0" , "onetime":"0" , "rtmp":"1" , "hls":"0" , "http":"0" } , "video":[{ "format":"mp4" , "codec":"h264" , "bitrate":"800" , "width":"" , "height":"" , "fps":"" , "audiocodec":"mp3" , "audiobitrate":"96" }] }
I want to find the number of elements inside the video array in the json data.
I tried using common_schema like the following:
SELECT common_schema.get_option(be.tagconfig,'option') as t
from tag be LIMIT 200;
However, I get all the values as null. Preferable I want to create another column which has the number of elements in the video array in the json data. Is there a direct way in mysql to do this?
common_schema has another function called extract_json_value function that can achieve exactly what you need here. It it better used from complex json object like the one you have. Under the hood it uses the json_to_xml function to convert the json to xml format and allows the use of xpaths to traverse through the object
SELECT common_schema.extract_json_value(be.tagconfig, 'count(//video)') as COUNT
the above query should get you what you need

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 arithmetic calculation result differs between Windows and Linux

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