none
SQL 2008 查詢分析器 查詢Latin1_General_BIN排序規則 結果顯示亂碼 RRS feed

  • 问题

  • 目前所用SQL 從2000升級到2008,遇到一個麻煩問題需要大家幫手,使用查詢分析器排序規則為Latin1_General_BIN的Table查詢結果中文全顯示亂碼!SQL2000 查詢分析器中有個 Perform translation for character data 選項去掉勾,就可以顯示正常,但是SQL2008和SQL2005怎麼才可以顯示正常?請高手指點!當然不可以改變之前數據庫排序規則! 肯請賜教! 萬分感謝!

    2010年6月25日 7:12

全部回复

  • Do you use unicode data type?
    2010年6月25日 12:46
  • 數據庫 Collation 為 Latin1_General_BIN ,這樣的數據庫查詢結果顯示亂碼,是否有辦法幫忙解決?非常感謝!
    2010年6月28日 4:50
  • 将存储数据的字段类型型改为 nchar/nvarchar/ntext 这类 unicode 类型, 常量加 N 前导符.

    否则, 你需要保证存储数据和 OS 与 读取数据的 OS 的代码页是一样的 (因为非 unicode 的存取, 需要做代码页转换)

    2010年6月28日 4:56
  • 非常感謝! 目前數據庫是ERP的DataBase,之前有將部分字段轉為nvarchar,但供應商確不認可! 請教下怎麼在代碼页做轉化?隻要能在查詢分析器中看到正常中文就可以了! 謝謝了!
    2010年6月29日 1:09
  • Try add 'collate' clause in you queries, books online has samples. 
    2010年6月29日 2:32
  • 给你个故意把collation弄错的例子。在SQL Server2005中试一试,它告诉你怎么让字符显示正常,或不正常

    use northwind


    drop table tbl1

    create table tbl1
    (id int,
    name varchar(30) collate Latin1_General_BIN,
    lName char(40) collate Latin1_General_BIN
    )

    --或

    create table tbl1
    (id int,
    name varchar(30) collate Chinese_Taiwan_stroke_Bin,
    lName char(40) collate Chinese_Taiwan_stroke_Bin
    )

    create table tbl1
    (id int,
    name varchar(30) collate Chinese_Taiwan_stroke_Bin,
    lName char(40) collate Chinese_Taiwan_stroke_Bin
    )

    go

    --注释:插入的字是等效于 insert into tbl1 values(1,N'數據庫查詢結果',N'顯示亂碼')

    insert into tbl1 values(1,0xBCC6BEDAAE77AC64B8DFB5B2AA4700000000000000000000000000000000,
    0xC5E3A5DCB6C3BD5820202020202020202020202020202020202020202020)

    --不能正常显示繁体汉字
    select lname collate Latin1_General_BIN  from tbl1
    --能正常显示繁体汉字
    select lname collate Chinese_Taiwan_stroke_Bin from tbl1

    2010年6月29日 9:09
  • 非常感謝您的回答, 現在測試結果如下,也是我最為不解的問題, 

    create table tbl1
    (id int,
    name varchar(30) collate Latin1_General_BIN,
    lName char(40) collate Latin1_General_BIN
    )

    insert into tbl1 values(1,0xBCC6BEDAAE77AC64B8DFB5B2AA4700000000000000000000000000000000,
    0xC5E3A5DCB6C3BD5820202020202020202020202020202020202020202020)

    --不能正常显示繁体汉字
    select lname collate Latin1_General_BIN  from tbl1
    --查詢結果 :  Åã¥Ü¶Ã½X
                                   
    --能正常显示繁体汉字
    select lname collate Chinese_Taiwan_stroke_Bin from tbl1
    ---查詢結果: Aa¥U?A?X    

    另外的2種排序規則沒問題,以上問題是我操作錯誤還是怎麼樣?始終沒看到正確的中文顯示! 迫切希望得到答案,非常感謝!

                              

    2010年6月29日 9:44
  • 這種方法有試過,但是中文始終沒辦法顯示!

    2010年6月29日 9:46
  • 按照 Latin1_General_BIN来存放繁体中文是不对的,确实显示不了。

    x0BCC6BEDA 的编码如果解释为Big5(Chinese_Taiwan_stroke_Bin)代表了繁体中文“數據”。

    x0BCC6BEDA 的编码如果解释为 Latin1_General 代表了 Åã¥Ü¶Ã½X 。都是区域性的标准,不用Unicode就打架了。

    你应该一开始就用collation = Chinese_Taiwan_stroke_Bin的字段存放繁体中文。存成Latin1_General_BIN的话,如果编码codepoint还在,那我估计只能用函数转换了。

    2010年6月30日 7:59
  • 刚创建的tbl1中怎么看都是乱码,因为采用了collate Latin1_General_BIN 

    这么转换一下就可以看了:

    create table tbl2
    (id int,
    name varchar(30) collate Chinese_Taiwan_stroke_Bin,
    lName char(40) collate Chinese_Taiwan_stroke_Bin
    )
    insert into tbl2
    select id, convert(binary, name),convert(binary, lname) from tbl1

    select * from tbl2 --能正常显示繁体汉字

    我想这不是最好的转换但是能用.

     

    2010年6月30日 8:28
  • 非常抱歉,這段時間沒來論壇! 

    ERP的後台數據經常需要我們來查詢,若每次查訊後先寫入一個TABLE再讀取出來,那簡直不可想象!

    還有其它的方法可以顯示出來嗎?  SQL2000就可以顯示,但是到了SQL2005和SQL2008反到有問題了!

    現在公司想升級到SQL2008,這個問題沒辦法處理,真不知如何升級!  各位還能給點方法嗎? 在次謝過各位了!

    2010年7月12日 8:01