现象:
用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中存的扩展码(乱码)
所有方案基于我的可能性假设。只是个人猜测,仅供参考。
用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中存的扩展码(乱码)
所有方案基于我的可能性假设。只是个人猜测,仅供参考。