是这样的,要查询存放 文件名信息的表(file_table),文件名是中文的。可是select
* from file_table where filename like "%文字%";这个参数是中文的,查询语句取不出
来信息,结果是空。 而且我也试过 set names utf8。请问这个怎么解决? 谢谢牛牛们~
* from file_table where filename like "%文字%";这个参数是中文的,查询语句取不出
来信息,结果是空。 而且我也试过 set names utf8。请问这个怎么解决? 谢谢牛牛们~
补充我的环境是windows 下mysql
表里面有这样的数据 “1能力.txt” 第一遍我查询 “能力”select filename from file_table where filename like binary '%能力.txt%';
Empty set (0.00 sec)第二遍我查询 “1”,结果很多我截取需要的那个结果
select filename from file_table where filename like binary '%1%';
+-------------------------------------------------------+
| filename |
+-------------------------------------------------------+
| 1将イ??将ゥ宵゙?.txt |
+-------------------------------------------------------+
23 rows in set (0.00 sec)
update file_table set filename = '1能力.txt'where id = 1; select结果:
select filename from ark_dhsm_file where filename like '%1%';
+-------------------------------------------------------+
| filename |
+-------------------------------------------------------+
| 1???.txt |为什么还是乱码捏?
+------------------------------------------------------------+
| hex(filename) |
+------------------------------------------------------------+
...
36E794B3E8AB8B2E747874 ———————————(1)
...
35 rows in set (0.00 sec)然后又将 需要匹配的文字转成十六进制
select hex('文字'); //注:该文字我替换了,下面的十六进制码也许和您的得到的不一样,这不是问题的主要原因
905C90BF —————————————(2)我认为(2)的应该可以在(1)中找到,这样就可以匹配着。可这是我一厢情愿,还是没能成功。介个大牛们给分析一下~
之前应该将数据库的字符集设定成中文字符集,如何设定和调整字符集参见
http://blog.donews.com/yllr/archive/2007/01/03/1107388.aspx
存储在表中的数据是不会改变的,这个取决于存储之前的字符设定。1. set names 'gbk' //日文字符是sjis,注意utf8和gbk还有sjis是有区别的
mysql> set names 'gbk';
mysql> select HEX(convert('能力' using utf8));
+---------------------------------+
| HEX(convert('能力' using utf8)) |
+---------------------------------+
| E693BBE6A4A1 |
+---------------------------------+
mysql> set names sjis;
mysql> select HEX(convert('能力' using utf8));
+---------------------------------+
| HEX(convert('能力' using utf8)) |
+---------------------------------+
| E883BDE58A9B |
+---------------------------------+
mysql> select HEX('能力');
+-------------+
| HEX('能力') |
+-------------+
| 9497CD |
+-------------+
2.将表中的数据转成十六进制,因为我的源表为日文集,以之为例,中文集亦然:
select hex(filename) from file_table;
....
| 35E68BBFE68D952E747874 |
| 36E794B3E8AB8B2E747874 |
| 31E883BDE58A9B2E747874 |
| 32E4BA88E683B32E747874 |
| 33E7A684E9AB982E747874 |
| 34E6A78BE7AF892E747874 |
.....可以看到1.设定为日文集的十六进制码(E883BDE58A9B),可以在表中匹配着3.因此总的sql为mysql>set names 'gbk';
mysql>select filename from ark_dhsm_file where cast(hex(filename) as char) like concat(‘%’,cast(hex(convert('能力' using utf8))as char),’%’)
感谢1,6楼的提示,4楼也有帮助。 谢谢大家的回帖,总结一下攒rp,下次再提问会有人回~哈哈