我有一个像这样的简单函数:
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配置中的一些问题?
答案 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
答案 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"
此部分。