windows中用com组件 adodb 插入字符串到SQL Server,如果所插入的字段是varchar 很大机率会出现错误。 如果是nvarchar则不出错,但是中文后面会跟随乱码。。  是不是PHP的BSTR处理的不好、、、、
//$rs是 com("adodb.recordset") 的实例 $a = '测试1';
$b = '测试测试测试2';
$c = '测试三测试三'; $rs->fields['cA']->value = $a;
$rs->fields['cB']->value = $b;
$rs->fields['cC']->value = $c;

$rs->update();
$rs->close();
PHPCOMSQL ServerADODB

解决方案 »

  1.   

    SQL Server 中
    varchar、char 是普通字符类型,宽度按字节计算
    nvarchar、nchar 是 unicode 字符类型,宽度按字计算(1字 = 2字节)一个 gbk 汉字需要 2 个字节
    一个 utf-8 汉字需要 3 个字节所以
    对于 varchar、char 需要按汉字的个数重新规划字段宽度,否则会截断或报超宽错误
    对于 nvarchar、nchar 需要赋予 ANSI 编码汉字,对于 utf-8 需转换成 ucs-2。否则由于一个 utf-8 汉字当做一个半 unicide 处理,要么超宽,要么就出现乱码