mysql儲存過程的中文問題的解決

2021-05-26 19:50:41 字數 1819 閱讀 6084

儲存過程中經常會遇到使用中文問題,一般出現的問題有以下幾種:

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...