Category Archives: MySQL Tips and Tricks

ShareChiWai CheatSheet – From MSSQL/TSQL to MYSQL – Comment and Define Variable in Stored Procedure

最近參與了很多的Hack Event 很多時候都是使用MySQLBackEnd
因為很小Teammate有一個MSSQL Server 的空間可以給我們便用..
所以便常常用到MySQL
由於是Hack Event的關係…所以我們只有很小時間去完成想做的功能..
為了方便自己不用花時間搜尋一些自己之前解決過的問題
所以便決定寫低這些不太起眼..
但是有時候需要用時又可能突然間想不到的程式碼..
今天和大家分享的是 MSSQLMySQL 有一些Syntax的不同..方便自己Look Up.
第一個分別是 Comment
今天想在MySQLStored Procedure 上Comment out一些Code來做測試..
當我使用TSQL的Comment 語句後嘗試儲存時便出現錯誤信息了
TSQL/MSSQL我們可以便用”” 來Comment的們的SQL Code
E.g.

T-SQL

--This stored proccedure is used to...

MySQL我們需要使用 “##” 來Comment我們的SQLCode
E.G.
MySQL

## 在MySQL上這是用來Comment Out程式碼的

第二個問題是怎樣在Stored proceure內定義一些變數用來暫時儲存資料之用

T-SQL上我們可以使用DECLARE 之後用SELECTSETAssige 內容到這些變數上
E.G.
T-SQL

--Define Variable in T-SQL
DECLARE @TestingVariable AS VARCHAR(20) ='Hello'
--我們還可以用以下方法來Assign Variable的
--使用Select
SELECT @TestingVariable = 'How Are You'
SELECT @TestingVariable
-- 使用SET
SET @TestingVariable = '你好嗎?'
SELECT @TestingVariable
--或使用SQL Select statement
SELECT @TestingVariable = Field1
FROM Table1

--這個句子要確定他只return 一行的結果, 如果不是的話 他會把最後的record加進這個變數上

MySQL

##Define Variable in MySQL
SET @TestingVariable ='Hello';

##或使用SQL Select statement
SELECT Field1 INTO @TestingVariable
FROM Table1
##這個句子要確定他只return 一行的結果 , 如果不是的話 他只會出現錯誤

如果在T-SQL上希望在SQL句子上Assign 多過一個Variable我們可以

DECLARE @MaxScore Int=0
DECLARE @MinScore Int=0
DECLARE @AverageScore float=0

--Assign more than 1 variable in SQL Statement
SELECT @MaxScore = MAX(Score), @MinScore = MIN(Score), @Average = AVG(Score)
FROM ExamResult

MySQL我們可以

SET @MaxScore =0
SET @MinScore =0
SET @AverageScore =0

##Assign more than 1 variable in SQL Statement
SELECT @MaxScore = MAX(Score), @MinScore = MIN(Score), @Average = AVG(Score)
FROM ExamResult

今天的TSQL VS MySQL到為止..
將來有時間會Upload 更多有關TSQL VS MySQL的網誌敬請留意
Hope you find it useful

Syntax error in MySQL Using LIKE in stored Procedure – 在MySQL的 Stored Procedure 上使用Like 出現語句錯誤

今天嘗試在MySQL上寫一個Stored procedure
上面會用到 “LIKE“這一個Operator
這個SQL 是用來查詢 在Table上的 Description field 有沒有和 在Stored Procedure 上 傳送過來 以 這個parameter 開始或結尾的 記錄

SELECT *
FROM localfood_data_tbl
WHERE description LIKE '%'+ var_Description+ '%';

當我儲存這個Stored procedure 時.. 卻出現以下的錯誤
SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ + var_Description +’%’;”
SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' + var_Description +'%';
我十分肯定這個語句在MSSQL上是沒有問題的

當我上網reseach 了一會之後發現..
這是MySQL的 語句問題
如果想把分開的文字串連在一起的話
MSSQL可以使用

SELECT '文字1' + '文字2'

但是在MySQL 上卻需要使用CONCAT 這一個功能
E.G.

SELECT CONCAT('文字1', '文字2')

最後我的SQL 變成了這樣子

SELECT *
FROM localfood_data_tbl
WHERE description LIKE  CONCAT('%', var_Description,'%')

Hope you find it useful

VB.Net mysql.data.dll Connector/Net Exception Unable to convert MySQL date/time value to System.DateTime

今日有朋友在VB.Net 上使用 MySQL 的 ADO.NET driver for MySQL [mysql.data.dll ]..時候 出現了以下的錯誤句子
“Unable to convert MySQL date/time value to System.DateTime”
做了一會資料搜集之後..終於找到了解決方法了

只要在Connection String 上加入以下設定便可
Allow Zero Datetime=True

更改了的Connection String 是這樣子的
Dim cs as String = “Database=TestDataBaseName; Data Source=localhost;User Id=root;Password=password; Allow Zero Datetime=True;”

Hope you find it useful

From MSSQL/TSQL to MYSQL

Have been working on MSSQL for quite a while. Now I started to work on MySQL. After you got the basic knowledge of SQL. I guess switch from MSSQL to MYSQL should not be too difficult.
When I try to wrote some Stored procedure in MYSQL. I find it little bit hard, as the syntax and keywords is a bit different. Therefore I start to drop down some notes about the difficulty i encountered when I using MYSQL.
E.g.
You need to ensure you have place semi-colon “;” at the end of each of the MySQL statement.
When you declare a variable in Stored procedure you do not need to put “@” in front of the variable in MySQL
Hope you find it useful too.