› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
hailongs
V2EX  ›  MySQL

求 sql 大神帮忙

  •  
  •   hailongs · Aug 3, 2016 · 3246 views
    This topic created in 3712 days ago, the information mentioned may be changed or developed.

    表如下:

    id name

    1 赠品 2 礼品 3 姑娘

    如果我用以下 sql 直接在终端上敲 select * from table where name not like '%赠品%' 结果会返回: id 为 2 和 3 的记录。

    目前的需求是:

    我的这个 sql 不直接写在程序里,而是写在文本文件中。 文本文件是 vim 写的,编码格式是 utf-8 的,这样在程序读这个文本文件的时候,“赠品”这两个中文词肯定会出错。读出来运行 sql 肯定出来的也是这三条记录,没有达到过滤的目的。

    我想要的结果:

    1.不更改 vim 编码环境,不然后期维护 sql 很麻烦。因为数据库中,需要用中文排除的记录比较多。 2.我还是想用 sql 直接写。想了下,数据库编码是 gbk 的,如果我把“赠品”这两个字的用 gbk 编码后,转换成 16 进制的,应该是可行的。可是在 google 查过之后,还是没有达到预期效果。 google 的解决方法是: f9 c6 b7 select * from table where name not like '%'+CHAR(0xd4)+CHAR(0xf9)+CHAR(0xc6)+CHAR(0xb7) +'%'

    希望得到帮助!

    8 replies  •  2016-08-04 12:06:32 +08:00
    zhx1991
        1
    zhx1991  
       Aug 3, 2016
    我怎么感觉是程序读的时候编码问题
    billlee
        2
    billlee  
       Aug 3, 2016
    如果程序写得正确,从文本文件读取 UTF-8 是不会出错的,查询也是能够正常进行的。
    klesh
        3
    klesh  
       Aug 3, 2016
    真是奇怪的设计。
    既然你知道是 utf-8 的话,那就按 utf-8 编码去读就 OK 了吧。就我有接触的编程语言标准类库中都含有按编码读取文本文件的功能。
    msg7086
        4
    msg7086  
       Aug 4, 2016
    考虑到你连用的什么语言都没写,那我就姑且推荐一下 SET NAMES UTF8 吧。
    gdtv
        5
    gdtv  
       Aug 4, 2016
    首先把这句 sql 直接写到程序代码里,运行,看正确不正确。
    用程序读文本里的 sql , print 出来看下有没有乱码,如果乱了,就转换一下编码。
    ebony0319
        6
    ebony0319  
       Aug 4, 2016
    其实我想问为什么一定要用 %赠品%',我们写的时候都是用一个基础表链接出去,或者使用 id 去查询。让用户选择中文,转换为 id 去查询的哇。
    hailongs
        7
    hailongs  
    OP
       Aug 4, 2016
    @billlee 数据库字段存储的编码类型是 gbk 的。我文本文件的类型是 u8 的,程序读 u8 的肯定没问题,读上来的这个 字段 名字是 u8 编码过的,在用 u8 编码过的字段 去查 gbk 的数据库,肯定有问题呀。
    hailongs
        8
    hailongs  
    OP
       Aug 4, 2016
    解决了。不过 sql 没解决。没找到方法。最终解决的方法是 在程序中执行 sql 前,把 sql 串 -> gbk 了。。。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2467 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 03:42 · PVG 11:42 · LAX 20:42 · JFK 23:42
    ♥ Do have faith in what you're doing.