我有一个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。
如何让它正常工作?感谢。
答案 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ığı