MySQL的中文亂碼問題是很有名的,簡單的解決辦法是查詢前先執行 SET NAMES ''utf8''。
以前一直都在本機上調試SQL Server的程序,沒遇到過什麼奇怪的問題,但是這兩天發現一個程序在本地運行的很正常,而且都是簡單的數據庫操作,但換到另一台電腦上,一涉及到時間的語句執行就會出錯,用事件探查器跟蹤下來,發現出錯的信息是:
Error 242, Serverity : 16, State : 3
網上找的結果是:http://www.derkeiler.com/Newsgroups/microsoft.public.sqlserver.security/2004-07/0308.Html
時間格式出錯。並且舉出例子,執行以下語句時會重現這個錯誤:
set language us_english
declare @k datetime
set @k=''25/07/2004''
再用事件探查器跟蹤安全審核,其中的Audit Login事件,發現在連接時,有這樣的連接信息:
-- network protocol: LPC
set quoted_identifIEr on
set implicit_transactions off
set cursor_close_on_commit off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yIElds_null on
set language romana
set dateformat ymd
set datefirst 7
其中的 set language romana 不是中文,可能問題就在這裡。再用查詢分析器登錄一下,裡面的語句是:
set language 簡體中文
這樣看那只要在程序裡設置一下,應該就沒有問題了。
程序是用 Delphi 裡的ADO做連接,可以設置高級參數,其中的Current Language,設成 簡體中文。為了保險,同時程序裡還有動態創建連接的部分,索性在所有連接數據庫的地方,連接完成後,都執行一下這個語句,再運行程序就正常了。