当WHERE子句上的DateTime列时,MySQL Charset失败

时间:2011-08-02 07:26:51

标签: mysql character-encoding

我有一个MYSQL查询,如下所示:

SELECT YA.PROGRAMNAME
FROM    TABLE_Y YA
WHERE   YA.PROGRAMID=9845 
AND YA.ENDDATE>NOW()

执行时,此查询无法正确返回特定于语言的字符(此处为土耳其语字符) 以上查询输出:

Zaman?n Tan???

土耳其字符被替换为问号。

如果我省略查询的最后一行,那么它可以正常工作,但是如果程序的结束日期比现在大,我会错过控制。

SELECT YA.PROGRAMNAME
FROM    TABLE_Y YA
WHERE   YA.PROGRAMID=9845

/* Outputs: Zamanın Tanığı */

旁注:TABLE_Y的字符集是latin5。

如何让它正常工作?感谢。

1 个答案:

答案 0 :(得分:0)

WHERE子句的奇怪行为。

我建议您在选择之前配置会话,例如 -

SET NAMES latin5; -- or SET NAMES utf8;
SELECT YA.PROGRAMNAME
FROM    TABLE_Y YA
...

修改

无法重现问题。客户端可能存在问题,但我不确定。

CREATE TABLE table_y(
  PROGRAMID INT(11) NOT NULL AUTO_INCREMENT,
  PROGRAMNAME VARCHAR(255) DEFAULT NULL,
  ENDDATE DATE DEFAULT NULL,
  PRIMARY KEY (PROGRAMID)
)
ENGINE = INNODB
CHARACTER SET latin5
COLLATE latin5_turkish_ci;

INSERT INTO table_y VALUES 
  (1, 'Zamanın Tanığı', '2014-10-03'),
  (2, 'Zamanın Tanığı', '2011-06-03');

SET NAMES latin1;
SELECT YA.PROGRAMNAME FROM TABLE_Y YA WHERE YA.PROGRAMID = 1 AND YA.ENDDATE > NOW();
---------------------------
Zaman?n Tan???


SET NAMES latin5;
SELECT YA.PROGRAMNAME FROM TABLE_Y YA WHERE YA.PROGRAMID = 1 AND YA.ENDDATE > NOW();
---------------------------
Zamanın Tanığı