PHP查询MSSQL的问题。

th1nk 2014-09-12 09:45:55
MSSQL中,字段名NAME, 字段内容是中文,字段类型 VACHAR(50) ,排序规则:SQL_Latin1_General_CP1_CI_AS (这个不可以改动)

PHP连接SQL通过其他相关内容查询出NAME可以正常显示中文,但是我通过查询NAME,就无法查询了,是不是要转换编码呢?

例如: select * from username where id=123
可以显示name为张三

但是反过来:select * from username where name=张三
就找不到了。

我知道可以把排序规则改下,但是改了其他地方又是乱码了。所以排序不能改。
...全文
310 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
th1nk 2014-09-16
  • 打赏
  • 举报
回复
自己已经解决了。结贴了。感谢各位的热心回答和帮助!谢谢你们!!
alicejohn 2014-09-15
  • 打赏
  • 举报
回复
改下连接库编码呗,UTF8
mengfk000 2014-09-15
  • 打赏
  • 举报
回复
你试试直接在数据库里运行select * from username where name='张三',应该可以运行出来呀
lane_L 2014-09-15
  • 打赏
  • 举报
回复
你存进去的时候是以utf8或者gbk的编码格式存进的中文 以latin1编码保存 你取出来的时候以utf8或者gbk的形式取,当然得到的是正确的中文 如果你以latin1编码取,取的就是数据库里存的乱码,应该完全一致. 如果你想通过数据库操作来查询中文,你应该查询的是gbk转latin1的那段编码 比较无聊...iconv好像不能转utf8的中文到ISO-8859-1//IGNORE 个人觉得没什么意思...看你自己了...这样转来转去也不可能用什么模糊搜索 数据存成这样 可够操作的方向非常少
th1nk 2014-09-15
  • 打赏
  • 举报
回复
引用 19 楼 zy205817 的回复:
首先你要解决数据库内容乱码的问题,乱码解决了,下一步就是读取读取数据编码问题。
数据库乱码没法解决。不在我控制范围。只有想办法读取,实在不行就算了。
码无边 2014-09-15
  • 打赏
  • 举报
回复
首先你要解决数据库内容乱码的问题,乱码解决了,下一步就是读取读取数据编码问题。
th1nk 2014-09-15
  • 打赏
  • 举报
回复
我比较好奇的是,为什么通过其他列名例如name=张三 id=1,通过查询id=1,php查询出来能正常转换成中文,反过来却不行, php默认设置GB2312, mssql是GBK,name这列是varchar(50)存储方式是ISO-8859-1
th1nk 2014-09-15
  • 打赏
  • 举报
回复
引用 16 楼 zy205817 的回复:
where name='ÖÐÎÄ'

你这个乱码值,在数据是否是乱码的?


是的,数据库里查询出来就是这样。



我在想mssql有没有什么转换语句,能在查询的时候把列名的数据类型转换一下。例如:

select 这里转换NAME为16进制或者CHAR from name where name= 这里把字符转换成16进制或者CHAR
码无边 2014-09-15
  • 打赏
  • 举报
回复
where name='ÖÐÎÄ' 你这个乱码值,在数据是否是乱码的?
th1nk 2014-09-15
  • 打赏
  • 举报
回复
引用 14 楼 u010592415 的回复:
编码问题,你的php默认编码不一致,传给mysql的值并不是'张三',当然无法查询. 可以尝试把php header("Content-type: text/html; charset=latin1");
我已经把php编码改成UTF8了。语句输出也是:
select * from server01.dbo.cabal_character_table where name='ÖÐÎÄ' //在数据库里的显示和这个一样,在sql工具直接执行此命令可以搜索到,这个是UTF8编码后的字符,原文是:中文
lane_L 2014-09-14
  • 打赏
  • 举报
回复
编码问题,你的php默认编码不一致,传给mysql的值并不是'张三',当然无法查询. 可以尝试把php header("Content-type: text/html; charset=latin1");
xuzuning 2014-09-13
  • 打赏
  • 举报
回复
你不是 select * from username where id=123 可以显示name为张三 我让你贴出 name 的值的 base64 编码
努力的老孙 2014-09-13
  • 打赏
  • 举报
回复
把你的sql语句先在phpmyadmin 中试一下呢。
th1nk 2014-09-13
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
你把通过其他内容查询出的 name 用 base64 编码后贴出了 比如产讯出的 name 字段把存在 $name 中,就 echo base64_encode($name); 贴出结果 gbk 环境中有
header('Content-type: text/html;charset=utf-8');
echo utf8_encode('中文'); //ÖÐÎÄ
echo utf8_encode('搜索'); //ËÑË÷
谢谢版大回复。

$str=utf8_encode('中文');
echo $str;
echo base64_encode($str);
$r=mssql_query("select *  from users  where Name='".$str."'");
显示把 中文 二字转换出来复制进sql工具可以查询,为什么在php里还是找不到呢?
xuzuning 2014-09-13
  • 打赏
  • 举报
回复
你把通过其他内容查询出的 name 用 base64 编码后贴出了 比如产讯出的 name 字段把存在 $name 中,就 echo base64_encode($name); 贴出结果 gbk 环境中有
header('Content-type: text/html;charset=utf-8');
echo utf8_encode('中文'); //ÖÐÎÄ
echo utf8_encode('搜索'); //ËÑË÷
th1nk 2014-09-13
  • 打赏
  • 举报
回复
奇怪的是,如果我通过表里的其他内容查询出来的,name里的中文,能够正常显示输出,直接查询中文name就搜索不到。 NAME字段里存的内容 ÖÐÎÄ(中文)ËÑË÷(搜索)我把这个乱码sql查询都可以查询到
cRazy谢不清 2014-09-13
  • 打赏
  • 举报
回复
记得以前有一次读书的时候用mysql 建数据库 也是设的 latin 字符集, 写项目的时候 也是可以存,但是做搜索功能就搜不出了,后面自己想去把数据转成utf8,但是一转,数据库里全是拉丁文。。当时只是随便建的练习项目,就没有纠结下去了,最好还是能存和项目一致的编码吧,不然以后多麻烦。
xuzuning 2014-09-13
  • 打赏
  • 举报
回复
首先你需要保证你的 sql 指令不会出现语法错误 然后才能探测有效的写法 你可以逐次改变条件的字符集,可能就会有一次成功 SQL_Latin1_General_CP1_CI_AS 是欧洲标注字符集第一套(单字节),理论上可覆盖所有字符 但实际上有个内部的字符集转换,能否正常的支持多字节字符集就是个问题
th1nk 2014-09-13
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
你是怎么得到 base64 编码串的? 不会是 echo base64_encode('中文'); 这样的吧?
不是啊。我是查询出来结果, php中查询语句:
$r=mssql_query("select *  from users where denglu=1");
查询结果直接BASE64的:
base64_encode($row[1])
如果版主你方便,我QQ远程给你看
th1nk 2014-09-13
  • 打赏
  • 举报
回复
不是啊。我是查询出来结果, php中查询语句:

$r=mssql_query("select *  from users where denglu=1");
查询结果直接BASE64的:

base64_encode($row[1])
加载更多回复(4)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧