比如“中国”->“4E2D 56FD”。

解决方案 »

  1.   

    UTF8倒是可以, UTF16你得准备一个编号表。其中包含每个汉字的UTF16,这样进行查询实现了。
      

  2.   

    噢那给我个UTF8的?我看看能不能借鉴?
      

  3.   

    UTF8则很简单。 你直接 select hex('中国');
      

  4.   

    UTF8:
    select hex('中国');
    UTF16的有专门的函数转换,可以用语言转换OR存入表中再查找
      

  5.   

    还是简单一点儿吧。
    select  hex(CONVERT('中国' USING ucs2) );
      

  6.   


    这个就是utf8啊,找到一个vc中utf8->utf16的算法,位运算在mysql中也有,难度在“取字节”进行操作。    1 //UTF-8格式的字符串
        2 const char* utf8 = "你";
        3 wchar_t unicode;
        4 unicode = (utf8[0] & 0x1F) << 12;
        5 unicode |= (utf8[1] & 0x3F) << 6;
        6 unicode |= (utf8[2] & 0x3F);
        7 //unicode is ok!c++中可以直接以数组的方式操作每个字节,不知道mysql中能否做到?
      

  7.   

    可以做到。
    但你还是用 #5楼 的方法吧。从现在实际情况来说,UTF16理论上等于UCS2
    另外你的C++算法只是对0800 - FFFF范围的进行了转换,但对其它的0000 - 007F 0080 - 07FF 均未考虑处理。
      

  8.   

    5楼这个方法行不通的。“中”的utf8为“E4 B8 AD”,utf16为“4E2D”,但select  hex(CONVERT('中' USING ucs2) );的值是“00E400B800AD”,明显还是utf8。
      

  9.   

    你是怎么执行的?在什么中?我在WORKBENCH中执行select  hex(CONVERT('中国' USING ucs2) );
    4E2D56FD
    show variables like 'char%';
    character_set_client utf8
    character_set_connection utf8
    character_set_database latin1
    character_set_filesystem binary
    character_set_results utf8
    character_set_server latin1
    character_set_system utf8
      

  10.   

    我的环境:
    show variables like 'char%';
    character_set_client latin1
    character_set_connection latin1
    character_set_database latin1
    character_set_filesystem binary
    character_set_results latin1
    character_set_server latin1
    character_set_system utf8
      

  11.   

    补充:直接在服务器的mysql命令环境中执行。
      

  12.   

    mysql 命令行先set names 'utf8';重习温习了一下编码:utf16和ucs2是不同编码组织的编码。差不多但不全等。多是两字节。utf16 默认等于unicode。最长两字节,有说是不定长。
      

  13.   

    讨论一下:我理解到ucs2是unicode的2字节编码格式,utf16是unicode的存储方式,与ucs2的区别应该是貌似只是大小头的问题?
      

  14.   

    我的意思是,ucs2其实就等于utf16LB?
      

  15.   

    WINDOWS下的命令行DOS环境并不支持UTF8.你需要找一个支持UTF8的工具。
    UCS2是一种编码。比如面UTF8,或者 UTF16是一种编码格式,并规则了传输等方面的约定。 没什么可比性。完成是不同的两样东西。基于目前的UCS2可以认为UTF16的编码等于UCS2.
      

  16.   

    从概念上说utf16和ucs2是不同的,但目前可以认为ucs2的编码值等于utf16LB的值吧?
      

  17.   

    在linux环境中set names 'utf8';后得到了正确的结果。ACMAIN_CHM 意思是,windows环境中,即使设置names后,也无法通过5楼的方式得到正确的utf16编码值吗?(没有windows环境测试,不好意思)