与PDO bindValue()操作'like'的非法混合排序

时间:2015-11-17 10:41:05

标签: php mysql pdo collation mysql-error-1267

我将代码从mysql_query更改为pdo prepare(),bindValue()和execute()

但是使用新代码时,我将希伯来语值绑定到:t0用于查询

select * from product where ( prd_name_HEB like :t0 or prd_code like :t0 ) 

我得到了

General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (hebrew_general_ci,COERCIBLE) for operation 'like'
  • prd_code整理是latin1_swedish_ci
  • prd_name_HEB整理是hebrew_general_ci
  • :t0整理未知。

我现在无法将整个数据库改为utf8_unicode_ci。

我知道我可以在查询中使用COLLATE来设置排序规则,但我不知道在哪里添加它。

  1. 请告诉我正确的语法是什么,使用“like”和“COLLATE”进行以下查询:

    从产品中选择*(prd_name_HEB喜欢:t0或prd_code喜欢:t0)

  2. 有没有办法将排序规则添加到PDO bindValue()?

  3. 感谢。

1 个答案:

答案 0 :(得分:0)

解决:

if searchString.containsHebrewCharacters()
  select * from product where ( prd_name_HEB like :t0 )
else
  select * from product where ( prd_name_HEB like :t0 or prd_code like :t0 )