向数据库写下ansi和unicode的字符串 数据库里到底存的是什么

向数据库写入ansi和unicode的字符串 数据库里到底存的是什么
本帖最后由 DisSmile 于 2012-11-10 04:44:02 编辑
数据库是accdb

CStringA s1="insert into a(b) VALUES('哈哈')";
CStringW s2=L"insert into a(b) VALUES('哈哈')";
        ado.Execute1(s1);//存一个ansi
        ado.Execute(s2);//存一个unicode
s2="哈哈";
UnicodeToUTF8(s2,&s1);//转换成utf8
CStringA s3;
s3.Format("insert into a(b) VALUES('%s')",s1);
        ado.Execute1(s3);//存一个utf8


我运行后 数据库里存的 第一条是哈哈  第二条是哈哈 第三条是 鍝堝搱

对于数据库来说他识别了ansi编码的"哈哈"和unicodo编码的"哈哈"  然后以"哈哈"储存?  而不是根据内存数据储存?

那数据库里都是以ansi编码储存还是unicode? 还是第一个是ansi编码 第二个unicode编码?

------解决方案--------------------
要是有心的话去研究ACCESS的保存格式,不过为了在所有的window版本运行,应该是都是UNICODE。
------解决方案--------------------
数据库存放文本数据是有代码集的,不符合代码集要求的通常会报错
一般情形下,数据库的文本编码分为两类:ANSI,UNICODE,你定义字段的时候就要确定,因为数据库并不只是存储数据,他还有管理数据的功能,比如索引...

对于utf-8,数据库不一定有对应的码集,你可以将它保存在字节类的字段里

你上面的测试,s1,s2并没有差别,是一种类型,你可以用16进制查看其编码:)