對(duì)MySQL 存儲(chǔ)過(guò)程中亂碼的破解
以下的文章主要介紹的是MySQL 存儲(chǔ)過(guò)程中的亂碼的實(shí)際解決方案,我們大家都知道存儲(chǔ)過(guò)程有問(wèn)題的話(huà),一般表現(xiàn)在無(wú)法對(duì)數(shù)據(jù)進(jìn)行正確查詢(xún)。以下就是文章的具體內(nèi)容介紹,望你會(huì)有所收獲。
數(shù)據(jù)表和字段都是 utf8 存儲(chǔ)的中文內(nèi)容。在連接數(shù)據(jù)庫(kù)后也使用 SET NAMES utf8; 設(shè)置了編碼。但是在MySQL 存儲(chǔ)過(guò)程中無(wú)法查詢(xún)中文內(nèi)容的字段。由于一些邏輯處理的原因,存儲(chǔ)過(guò)程使用了游標(biāo),同時(shí)定義了一些局部變量。
- CREATE PROCEDURE `PROC_FOOBAR`(id INTEGER)
- BEGIN
- DECLARE user_id VARCHAR(32) ;
省略代碼若干
- END
user_id 在代碼中參與了一個(gè) 查詢(xún)
- SELECT * FROM `table1` WHERE `UID` = user_id
在存儲(chǔ)過(guò)程中輸出 user_id 發(fā)現(xiàn)英文內(nèi)容正常,但是中文內(nèi)容亂碼。
開(kāi)始以為MySQL 存儲(chǔ)過(guò)程的編碼有問(wèn)題,但是不使用變量的內(nèi)容又正常。上網(wǎng)查了一下,有人遇到同樣的問(wèn)題:
http://203.208.37.132/search?q=cache:VUrY1gSBQGoJ:topic.csdn.net/u/20090429/17/46c012c2-a03f-4705-8648-b18ce75efa0b.html+MySQL+%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B+%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81&cd=1&hl=zh-CN&ct=clnk&gl=cn&st_usg=ALhdy28jxW-2knrZuSFRzKD3K79huGGIUA
但是顯然,他的問(wèn)題只要正確設(shè)置編碼即可。
突然靈光一現(xiàn),NND,character set 這個(gè)東西我忽略了。正解如下:
- CREATE PROCEDURE `PROC_FOOBAR`(id INTEGER)
- BEGIN
- DECLARE code, user_id VARCHAR(32) CHARACTER SET utf8;
省略代碼若干
- END
以上的相關(guān)內(nèi)容就是對(duì)MySQL 存儲(chǔ)過(guò)程亂碼的解決辦法的介紹,望你能有所收獲。
【編輯推薦】