儲存過程中經常會遇到使用中文問題,一般出現的問題有以下幾種:
1、字段定義不是中文編碼
2、字段長度不足
3、儲存資訊為亂碼,尤其通過執行sql指令碼新增資料最為常見
4、使用where子句是,對中文字串進行比較,這個問題也是十分常見
對於前兩個問題,我沒啥話。
第3個問題,一定要注意執行指令碼的終端,系統預設的字元編碼是你所要求的,這個問題歸根到底是mysql字符集的問題,
o mysql的字符集支援(character set support)有兩個方面: 字符集(characterset)和排序方式(collation)。
o 對於字符集的支援細化到四個層次: 伺服器(server),資料庫(database),資料表(table)和連線(connection)。
mysql對於字符集的指定可以細化到乙個資料庫,一張表,一列,應該用什麼字符集。
* 檢視預設字符集(預設情況下,mysql的字符集是latin1(iso_8859_1)
mysql> show variables like 'character%';
mysql> show variables like 'collation_%';
* 使用命令修改字符集
mysql> set character_set_client = utf8 ;
mysql> set character_set_connection = utf8 ;
mysql> set character_set_database = utf8 ;
mysql> set character_set_results = utf8 ;
mysql> set character_set_server = utf8 ;
mysql> set collation_connection = utf8 ;
mysql> set collation_database = utf8 ;
mysql> set collation_server = utf8 ;
出現問題3的原因是:設定了表的預設字符集為utf8並且通過utf-8編碼傳送查詢,但這個connection連線層的編碼仍然不正確。解決方法是在傳送查詢前執行一下下面這句:
set names 'utf8';
它相當於下面的三句指令:
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
問題4解決方法:
對需要比較的兩邊變數或常量使用轉碼(collate utf8_unicode_ci),如
declare cur_preferences cursor for select id from preferences where @name like concat("%",rtitle collate utf8_unicode_ci ) ;
上面的語句可能不成功
declare cur_preferences cursor for select id from preferences where @name collate utf8_unicode_ci like concat("%",rtitle collate utf8_unicode_ci ) ;
這樣就可以解決這個問題
mysql儲存過程問題 MySQL儲存過程
儲存過程是一組為了完成特定功能的 sql 語句集合。使用儲存過程的目的是將常用或複雜的工作預先用 sql 語句寫好並用乙個指定名稱儲存起來,這個過程經編譯和優化後儲存在資料庫伺服器中,因此稱為儲存過程。當以後需要資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫 call儲存過程名字 即可自...
MySQL的儲存過程
儲存過程 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 也可以無引數 來用執行它,乙個儲存過程是乙個可編譯的函式,它在資料庫中建立並儲存 優點 增強sql語言的功能和靈活性 儲存過程允許標準元件是程式設計 儲存過程能實現較快的執行速度 可以減少...
mysql的儲存過程
一 儲存過程是儲存在資料庫目錄中的一段宣告性sql語句。在mysql 5.0版本以後,儲存過程,儲存函式 觸發器 和事件這些功能才被新增到mysql資料庫引擎。delimiter create procedure getallproducts begin select from products e...