使用特殊字符查询在Active Record中不起作用

时间:2015-12-16 14:26:39

标签: php sql-server codeigniter activerecord character-encoding

我有一个像这样的简单函数:

function get($name) {

  //SELECT ID FROM USERS WHERE NAME = $name
  $this->db->select('ID');
  $this->db->limit(1);
  $this->db->from('USERS');
  $this->db->where('NAME', $name);

  $query = $this->db->get();

  $row = $query->row();
  return $row->ID;  
}

除非$name(例如Ñ或Á)中有特殊字符,否则一切正常。在这种情况下,查询不返回任何行。

我已经使用$this->db->last_query()直接在SQL控制台上尝试查询,并返回一个返回预期值的完全有效的查询。对我来说,这意味着查询没问题,但Codeigniter和SQL Server之间存在一些编码问题。

我检查了数据库编码配置及其:

$db['odbc']['char_set'] = 'utf8';
$db['odbc']['dbcollat'] = 'utf8_general_ci';

数据库的排名规则为Modern_Spanish_CI_AS,NAME字段设置为databse default

我错过了什么?可能是PHP配置中的一些问题?

2 个答案:

答案 0 :(得分:0)

将数据库归类更改为utf8_general_ci

并检查USERS表格整理和NAME字段整理。

 ALTER DATABASE <database_name> COLLATE SQL_Latin1_General_CP1_CI_AS ;

 ALTER TABLE USERS ALTER COLUMN NAME varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS

您也可以从管理工作室更改..它位于选项菜单下 enter image description here

答案 1 :(得分:0)

尝试

$this->db->like('NAME', $name);

头文件中的

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  

如果您使用Codeigniter form_open(),它会自动生成<form method="post" accept-charset="utf-8"此部分。