表如下:
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) +'%'
希望得到帮助!
1
zhx1991 2016-08-03 22:17:13 +08:00
我怎么感觉是程序读的时候编码问题
|
2
billlee 2016-08-03 22:28:45 +08:00
如果程序写得正确,从文本文件读取 UTF-8 是不会出错的,查询也是能够正常进行的。
|
3
klesh 2016-08-03 22:35:36 +08:00
真是奇怪的设计。
既然你知道是 utf-8 的话,那就按 utf-8 编码去读就 OK 了吧。就我有接触的编程语言标准类库中都含有按编码读取文本文件的功能。 |
4
msg7086 2016-08-04 03:24:02 +08:00
考虑到你连用的什么语言都没写,那我就姑且推荐一下 SET NAMES UTF8 吧。
|
5
gdtv 2016-08-04 07:35:29 +08:00
首先把这句 sql 直接写到程序代码里,运行,看正确不正确。
用程序读文本里的 sql , print 出来看下有没有乱码,如果乱了,就转换一下编码。 |
6
ebony0319 2016-08-04 09:01:16 +08:00
其实我想问为什么一定要用 %赠品%',我们写的时候都是用一个基础表链接出去,或者使用 id 去查询。让用户选择中文,转换为 id 去查询的哇。
|
7
hailongs OP @billlee 数据库字段存储的编码类型是 gbk 的。我文本文件的类型是 u8 的,程序读 u8 的肯定没问题,读上来的这个 字段 名字是 u8 编码过的,在用 u8 编码过的字段 去查 gbk 的数据库,肯定有问题呀。
|
8
hailongs OP 解决了。不过 sql 没解决。没找到方法。最终解决的方法是 在程序中执行 sql 前,把 sql 串 -> gbk 了。。。。。
|