【问题标题】:Using php and odbc connection, not getting result from SQL with é in query?使用 php 和 odbc 连接,在查询中没有从带有 é 的 SQL 获取结果?
【发布时间】:2012-03-07 05:21:44
【问题描述】:

我通过以下方式从 SQL 数据库查询 php 页面:

$virtual_dsn = 'DRIVER={SQL Server};SERVER=myserver;DATABASE=mydatabase';
$connection = odbc_connect($virtual_dsn,user,pass) or die('ODBC Error:: '.odbc_error().' :: '.odbc_errormsg().' :: '.$virtual_dsn);
odbc_exec($connection,mydatabase);

$query = "SELECT * FROM mytable WHERE myfield = 'Séjourné'";
$result = odbc_exec($connection, $query);

我知道表中有应该与此查询匹配的行,但它们没有被返回。我已将问题缩小到“é”字符;即没有该字符的查询按预期返回,但我无法查询包含“é”的记录。我怀疑这个问题与字符的编码有关。我希望有某种方法可以指定应该为我的 ODBC 连接或查询使用什么字符集。如果有我找不到。

我错过了什么。谢谢。

【问题讨论】:

  • 检查这个:stackoverflow.com/a/7308476/206502>
  • 如果这是您的真实代码,则引用无效:$query = 'SELECT * FROM mytable WHERE myfield = 'Séjourné'; 将查询字符串括在双引号中。
  • 我更正了有问题的类型。那不是问题所在。该代码适用于除带有“é”的查询之外的查询。

标签: php sql encoding odbc


【解决方案1】:

缺少配额。我重写了你的台词。

$query = "SELECT * FROM mytable WHERE myfield = 'Séjourné'";

【讨论】:

  • 那是问题中的错字。
  • 好的,那么..你有一个字符问题:在控制台中:SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';或.. 在查询中使用:在 where 条件之后 COLLATE utf8_bin,对不起,但我不知道什么是最适合你的字符集。
  • 感谢您的帮助 Crsr,但到目前为止还没有运气。在 sql 数据库中,表的排序规则设置为 SQL_Latin1_General_CP1_CI_AS。我试过: $query = "SELECT * FROM mytable WHERE myfield = 'Séjourné' COLLATE utf8_bin";和 $query = "SELECT * FROM mytable WHERE myfield = 'Séjourné' COLLATE Latin1_General_CP1_CI_AS";和 $query = "SELECT * FROM mytable WHERE myfield = 'Séjourné' COLLATE SQL_Latin1_General_CP1_CI_AS";这些都不起作用。
  • 查看我的答案.. 在评论中要写很多代码:)
【解决方案2】:

请这样做:

create table test1 (
title text)
default charset = utf8, default collate = utf8_general_ci;
insert into test1 values ('tèst');
insert into test1 values ('tèst');
insert into test1 values ('tèst');
insert into test1 values ('tèst');
insert into test1 values ('tèst');
insert into test1 values ('test');
insert into test1 values ('test');
insert into test1 values ('test');
insert into test1 values ('test');

并运行此查询:

SELECT * FROM test1 WHERE title = 'tèst'
SELECT * FROM test1 WHERE title = 'test'

你的结果是什么?对我来说,在这两种情况下,都返回所有记录。

乐:

odbc_exec($connection, "SET NAMES 'UTF8'");
odbc_exec($connection, "SET client_encoding='UTF-8'");

或 utf8_general_ci

结果需要根据è字符不同吗?

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多