mysql中 pre_forum_forum 表中
id     name  
1      万达
2      星城
3      满城
...现需:我要查出 name字段中首字母为w 的记录,怎么实现呀。

解决方案 »

  1.   

    没记错的话老大写过一个汉字和 拼音转换的函数的.但是在php处理,你得给数据库增加字段.将对照的拼音update.然后搜索这个新增加的字段。要mysql直接完成我看没戏...
      

  2.   

    有人用mysql 中的hex写过,
    hex怎么实现呀,
      

  3.   

    用hex和唠叨给的那个实际是一样的,原理是这样的: gb2312的一级汉字是按照拼音排序的,所以内码临近的汉字拼音相同,
    于是根据一个内码段和拼音的对应表,就可以根据内码得到拼音。当然限制就是只对gb2312的一级汉字有效。
    另这样的查询必然是全表扫描。所以,如果增加拼音字段是更好的方法,
    当然你最好有一个更好版本的汉字转拼音工具。
      

  4.   

    这个问题我也需要用到。查了很多资料,都出现了问题。
    一个是网站比较流行的PHP的函数,测试了,很多字无法转。比如:深圳的圳、癈、等很多都无法转。
    后来用到了字典表,就是先将文字创建成一个表,将每一个字都存储起来,用的时候到数据库里面去查。即使这样,能够识别所有的汉字了,但是还有一个问题没法解决。那就是多音字。目前只能将就着用。mysql中 pre_forum_forum 表中
    id name   
    1 万达
    2 星城
    3 满城像你的这个表的话,还需要对应的一个字段:   pinyin 字段。将词语的拼音保留起来,建立起索引。这样大数据访问的时候才能达到最优化。
      

  5.   

    select * from pre_forum_forum f where 
    hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'
      

  6.   

    'A' => " hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'",
    'B' => " hex( left( f.name, 1 ) ) >= 'B0C5' AND hex( left( f.name, 1 ) ) <= 'B2C0'",
    'C' => " hex( left( f.name, 1 ) ) >= 'B2C1' AND hex( left( f.name, 1 ) ) <= 'B2C0'",
    'D' => " hex( left( f.name, 1 ) ) >= 'B4EE' AND hex( left( f.name, 1 ) ) <= 'B6E9'",
    'E' => " hex( left( f.name, 1 ) ) >= 'B6EA' AND hex( left( f.name, 1 ) ) <= 'B7A1'",
    'F' => " hex( left( f.name, 1 ) ) >= 'B7A2' AND hex( left( f.name, 1 ) ) <= 'B8C0'",
    'G' => " hex( left( f.name, 1 ) ) >= 'B8C1' AND hex( left( f.name, 1 ) ) <= 'B9FD'",
    'H' => " hex( left( f.name, 1 ) ) >= 'B9EE' AND hex( left( f.name, 1 ) ) <= 'BBF6'",
    'I' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BBF6'",
    'J' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BFA5'",
    'K' => " hex( left( f.name, 1 ) ) >= 'BFA6' AND hex( left( f.name, 1 ) ) <= 'C0AB'",
    'L' => " hex( left( f.name, 1 ) ) >= 'C0AC' AND hex( left( f.name, 1 ) ) <= 'C2E7'",
    'M' => " hex( left( f.name, 1 ) ) >= 'C2E8' AND hex( left( f.name, 1 ) ) <= 'C4C2'",
    'N' => " hex( left( f.name, 1 ) ) >= 'C4C3' AND hex( left( f.name, 1 ) ) <= 'C5B5'",
    'O' => " hex( left( f.name, 1 ) ) >= 'C5B6' AND hex( left( f.name, 1 ) ) <= 'C5BD'",
    'P' => " hex( left( f.name, 1 ) ) >= 'C5BE' AND hex( left( f.name, 1 ) ) <= 'C6D9'",
    'Q' => " hex( left( f.name, 1 ) ) >= 'C6DA' AND hex( left( f.name, 1 ) ) <= 'C8BA'",
    'R' => " hex( left( f.name, 1 ) ) >= 'C8BB' AND hex( left( f.name, 1 ) ) <= 'C8F5'",
    'S' => " hex( left( f.name, 1 ) ) >= 'C8F6' AND hex( left( f.name, 1 ) ) <= 'CBF9'",
    'T' => " hex( left( f.name, 1 ) ) >= 'CBFA' AND hex( left( f.name, 1 ) ) <= 'CDD9'",
    'U' => " hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'",
    'V' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BFA5'",
    'W' => " hex( left( f.name, 1 ) ) >= 'CDDA' AND hex( left( f.name, 1 ) ) <= 'CEF3'",
    'X' => " hex( left( f.name, 1 ) ) >= 'CEF4' AND hex( left( f.name, 1 ) ) <= 'D1B8'",
    'Y' => " hex( left( f.name, 1 ) ) >= 'D1B9' AND hex( left( f.name, 1 ) ) <= 'D4D0'",
    'Z' => " hex( left( f.name, 1 ) ) >= 'D4D1' AND hex( left( f.name, 1 ) ) <= 'D7FD'",