mysql存儲過程字元編碼
Ⅰ Mysql和SQL Server存儲過程寫法上有什麼區別
一、多數指令是相同的,包括創建和修正存儲過程的指令。
二、很多細微的指令有不同,具體如下(不僅):
1 mysql支持enum,和set類型,sql server不支持。
2 mysql不支持nchar,nvarchar,ntext類型。
3 mysql的遞增語句是AUTO_INCREMENT,而mssql是identity(1,1)。
MYSQL:create table basic(id int key auto_increment,name varchar(20));
MSSQL: create table basic(id int identity(1,1) , name varchar(20))
4 msms默認到處表創建語句的默認值表示是((0)),而在mysql裡面是不允許帶兩括弧的。
5 mysql需要為表指定存儲類型。
6 mssql識別符是[],[type]表示他區別於關鍵字(可選用來包含表名、欄位名),但是mysql卻是 `(重音符,也就是按鍵1左邊的那個符號)。
7 mssql支持getdate()方法獲取當前時間日期,但是mysql裡面可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是 now()函數。
8 mssql不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法。
Ⅱ MySQL怎麼寫存儲過程查詢某個表的某一條記錄,並把這條記錄的所有列名對應的值以json格式返回呢
給你個思路吧,既然你能問出這種問題應該是有了思路就會自己做的人,就不幫你寫代碼了。
首先,你確定這個表的所有欄位中沒有二進制內容,如果沒有的話,下面這個思路你可以試試,但是如果有的話估計就需要對二進制進行特別的處理了,如果你有的話再追問吧。
思路開始:
1.如果你是對一張確定的表(提前已經知道表結構)進行這樣的處理,那就查詢出來一條記錄,通過Mysql的字元串拼接函數CONCAT,按照JSON格式,慢慢的拼一個字元串,最後通過select這個字元串返回這個字元串就行了。
2.如果之前你並不知道,這個表的結構,甚至你根本不知道自己要處理的是那張表,那麼存儲過程中你需要傳遞一個表名進來,然後查詢information_schema資料庫中的COLUMNS表,從而獲得這個表的具體欄位信息,以及各個欄位的先後順序(為後面拼接字元串使用),剩下的就跟1中描述的思路一樣了。
雖然不知道你的用處是什麼,不過,以我個人的經驗,這種返回JSON的方式並不可取,這樣會增加資料庫的負擔,理論上應該是將數據出來後自己在程序中拼接。
Ⅲ Mysql 存儲過程,傳遞中文參數問題
應該是編碼問題。輸入
set names gbk;
這是使你輸入查詢取數據的傳輸的用的編碼。
不行的話可能你原先存的時候編碼就不對了。
所以就先drop你當前這資料庫,然後set names gbk; ,再建資料庫和表。再測試下應該就可以。
當然還要保證你的server client 底層存數據的默認編碼是utf8..至少要gbk,如果默認是latin1要改下。具體在配置文件my.ini里改 default-character-set=utf8 這個你可以搜索一下具體怎麼改
Ⅳ 為什麼MySQL的存儲過程的書寫這么麻煩DELIMITER 這種字元有什麼作用
其實就是告訴mysql解釋器,該段命令是否已經結束了,mysql是否可以執行了。
默認情況下,delimiter是分號;。在命令行客戶端中,如果有一行命令以分號結束,
那麼回車後,mysql將會執行該命令。如輸入下面的語句
mysql> select * from test_table;
然後回車,那麼MySQL將立即執行該語句。
但有時候,不希望MySQL這么做。在為可能輸入較多的語句,且語句中包含有分號。
如試圖在命令行客戶端中輸入如下語句
mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
mysql> RETURNS varchar(255)
mysql> BEGIN
mysql> IF ISNULL(S) THEN
mysql> RETURN '';
mysql> ELSEIF N<15 THEN
mysql> RETURN LEFT(S, N);
mysql> ELSE
mysql> IF CHAR_LENGTH(S) <=N THEN
mysql> RETURN S;
mysql> ELSE
mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql> END IF;
mysql> END IF;
mysql> END;
默認情況下,不可能等到用戶把這些語句全部輸入完之後,再執行整段語句。
因為mysql一遇到分號,它就要自動執行。
即,在語句RETURN '';時,mysql解釋器就要執行了。
這種情況下,就需要事先把delimiter換成其它符號,如//或$$。
mysql> delimiter //
mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
mysql> RETURNS varchar(255)
mysql> BEGIN
mysql> IF ISNULL(S) THEN
mysql> RETURN '';
mysql> ELSEIF N<15 THEN
mysql> RETURN LEFT(S, N);
mysql> ELSE
mysql> IF CHAR_LENGTH(S) <=N THEN
mysql> RETURN S;
mysql> ELSE
mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql> END IF;
mysql> END IF;
mysql> END;//
這樣只有當//出現之後,mysql解釋器才會執行這段語句