×

Loading...
Ad by
  • 最优利率和cashback可以申请特批,好信用好收入offer更好。请点链接扫码加微信咨询,Scotiabank -- Nick Zhang 6478812600。
Ad by
  • 最优利率和cashback可以申请特批,好信用好收入offer更好。请点链接扫码加微信咨询,Scotiabank -- Nick Zhang 6478812600。

My 3 cents,参考:

现象:
用ASP+ADO代码可以在ASP下显示正常“洋洋”,用数据库SQL Analyzer直接写反而查不到结果

可能性:
ASP页把“洋洋”翻译成扩展码之后,放到SQL中,因此SQL直接查询UNICODE "洋洋"不会有结果,如果有ID的话,可以看到“洋洋“是类似于&*^%的乱码。但是用ASP回显乱码,有个逆向的从扩展码到“洋洋“的过程因而显示是正常的。但是密码比对程序又不能把“洋洋“翻译成扩展码,因此无法校验。

方案:
(1)确保ASP/SQL都能正确handle UNICODE。建议页头加诸如:<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
并且保证Session.Codepage=65001这样,ADO可以把ASP上输入的字符正确转成 UTF-8unicode规范,SQL server可按正确unicode存储信息。

或者

(2)牺牲中文密码,在用户选择密码时加判断,只能是26个英文字母+阿拉伯数字等等。

或者
(3)密码校验程序测试,保证其翻译"洋洋“为sql server中存的扩展码(乱码)

所有方案基于我的可能性假设。只是个人猜测,仅供参考。
Report

Replies, comments and Discussions:

  • 工作学习 / IT杂谈 / 以前用MS ACCESS 时一切都正常, 现在换成MS SQL 2000就有问题了, 用中文登记的用户名(例如,洋洋), 在密码验证时用户名查不到,但数据库里有.为什么中文名查不到? 英文用户名正常. 请帮助,谢谢!! (用ASP, MS SQL2000)
    • 有些数据库处理字段值没到定义的长度,会加空格补充的,你在select语句中用rtrim函数处理该字段,或是用like试试
      • I use "nvarchar" for user name
        • 你用了nvarchar,那么该字段后面是没有空格的,那你存储的中文会不会与你输入的有区别?要么是数据库设置问题了
    • 是不是倒数据的时候被加上了什么不可见字符?
      • from ACCESS 2000 transfer to MS SQL 2000, and then export data to my host server.
        • 象兔八哥所说,你先查询"洋洋",然后加ltrim, rtrim再查询,如果加trim能查的出来而前面的查不出来就是被加上了了不可见字符.
          • ltrim能去掉除空格之外的不可见字符吗?历害。在比较时SQL Server 2000会忽略掉空格的,不用trim
            • @@ 糊涂了:( 应该是用like来测试.想不起来SQL server代替字符是用什么符号来表示了,"?" or "*" ?
              • 我的SEARCH功能使用LIKE, 用中文关键字, 查询文章标题时, 返回的结果也有问题, 结果不包含我要找的关键字. 全是中文有问题, 但以前用ACCESS 时没有.
      • 原有的中文名和新注册的中文名都查不到, 但中文名可以显示,
        • 在数据库里看的到么?
          • 在数据库里可以看到中文名, 在IE里也可以显示中文名.
            • select * from table1 where name like "%洋洋%" 搜索结果怎样呢?
              • 单引号才对吧?
                • @@ 高手来了,我撤.........
                  • 咱都是用户而已。写产品的人才是高手呀。
              • not work
                • 有什么提示呀?
                  • 程序没有错误, 所以没有错误提示,
                • 用单引号, 不能查到.
                  • 用什么查的?SQL query analyzer直接写的?没有查到是指出错信息还是指语法错误?
                    • use ASP, 如果数据库到底, 就反馈没有此用户.
                      • My 3 cents,参考:
                        现象:
                        用ASP+ADO代码可以在ASP下显示正常“洋洋”,用数据库SQL Analyzer直接写反而查不到结果

                        可能性:
                        ASP页把“洋洋”翻译成扩展码之后,放到SQL中,因此SQL直接查询UNICODE "洋洋"不会有结果,如果有ID的话,可以看到“洋洋“是类似于&*^%的乱码。但是用ASP回显乱码,有个逆向的从扩展码到“洋洋“的过程因而显示是正常的。但是密码比对程序又不能把“洋洋“翻译成扩展码,因此无法校验。

                        方案:
                        (1)确保ASP/SQL都能正确handle UNICODE。建议页头加诸如:<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
                        并且保证Session.Codepage=65001这样,ADO可以把ASP上输入的字符正确转成 UTF-8unicode规范,SQL server可按正确unicode存储信息。

                        或者

                        (2)牺牲中文密码,在用户选择密码时加判断,只能是26个英文字母+阿拉伯数字等等。

                        或者
                        (3)密码校验程序测试,保证其翻译"洋洋“为sql server中存的扩展码(乱码)

                        所有方案基于我的可能性假设。只是个人猜测,仅供参考。
                        • 刚刚测试了一下:ROLIA现在就不能handle中文注册名,和中文密码。这是省心省力的方法建议使用。
                          • 但是文章查找要用中文关键字怎办?
                            • 呵呵,全文查询麻烦一点,SQL2000如果所有字段<8000 (unicode nvarchar<4000)你尚可以用select语句,>8000就是text/ntext就得采用全文索引了。原则是注意客户端(asp/ado)到数据库的传输码和数据库中的存储码匹配。(参考)
                        • charset=utf-8? 以前我写的一直是gb_2312-80.
    • BTW,啰嗦一句,设计数据库的时候怎么不设计ID字段?
    • 查一下你server的collation setting是什么.collation setting 直接影响到T-SQL statement中对特定语言character的识别.SQL 2000以前的版本如果要改collation 只有重新install sql server,不过从SQL 2000 以后可以在install 以后改动.
      • 跟operation system有没有关系呢?
        • I don't think this issue is related to the OS. Here the OS just provides the installation with the default setting of the collation.
          When you install sql server, the installation will detect the type of the locale the windows is running and display that as the default SQL collation.
          The sql collation controls the rules governing how SQL Server sorts and compares characters stored in both Unicode and non-Unicode data types.
    • 既然数据库和I.E.客户端能正常显示,那么不该是collation问题。现在问题是你使用什么客户端against 数据库?大体上该注意测试string函数的unicode问题。用profiler debug效率最高,可以马上知道结果。
      • 对了,你怎么知道I.E.可以正常显示??你写了什么ASP代码做的测试吗?
        • 用户维护程序, 可以显示全部用户名, 包括中文用户名. 显示正常.
      • 唉.看来还是得多一句嘴啦.collation 决定的不是显示(the list of select)而是比较和排序(in the where and order by statement).
        • 奥,我要说的是针对#602225贴。
          • 用户能从IE和Query analyzer看到table内的中文string,只能说明nvarchar的作用,而要验证user和password,这是characters之间的comparison,是由collation决定的. 也就是我在602225所说的识别问题.在此例中,database sort order ID 必须是198或199或203.
            换言之,如果collation设定的是default Dictionary order, case-insensitive, for use with the 437 (U.S. English) character set (sort order ID =34),就没法对两组chinese characters 进行正确的比较.这也就是为什么他在search时,所有的中文都出错.
            • 真是高手, 多谢了. 再次感谢!!! 在建立数据库时设置database sort order ID =198, 现在一切都正常了. 中文查询和中文用户名都可以用了. 再请问高手,
              我将一个数据库从server A 传到 server B, 数据都可以正常传送, 但数据库的缺省值不能传送, 该如何解决. 谢谢!
              • There are at least two solutions.
                本文发表在 rolia.net 枫下论坛1.Select the table you want to move, right click then go to 'All Tasks' then 'Generate SQL Scripts...'. This will bring up a command box to select any/all objects in SQL to script out into a .sql file. Go to the 'Options' tab that has several check boxes. If you want the defaults for that table, tick the last box under the 'Table Scripting Options' heading.

                After you save the file, open it in Query Analyser and connect to the DB where you want the new table. Run the script and that should generate the table minus the data. Then use DTS to transfer data between SQL Servers.

                2.using the Import/Export wizard and selecting the option: 'Copy table(s) and view(s) from the source database'.

                On the screen that you select the table(s) you want to transfer click on the correspoding transform column. At that point you get a window named 'Column Mappings and Transformation'. Click on 'Edit SQL'. You will see the SQL to create the table. There is where you would have to write the SQL to add the default constraint. I think DTS will not create the default constraints by default. You have to explicitly define it yourself.更多精彩文章及讨论,请光临枫下论坛 rolia.net