2010-11-10 60 views
1

我有一個搜索功能的工作,我想這是不區分大小寫,包括像EUO等MySQL的UPPER()和LOWER()不是UTF-8字符

這樣的人物,我將輸入到大寫在查詢數據庫之前。但是,MySQL不會將重音字符正確轉換。

SELECT * FROM items WHERE UPPER(description) = $input 

我有MySQL 5.1.32,我嘗試了不同的排序規則,但沒有一個看起來沒有問題。與LOWER()一樣。

CREATE TABLE `items` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) DEFAULT NULL, 
    `description` text CHARACTER SET utf8 COLLATE utf8_bin, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=187 DEFAULT CHARSET=utf8" 

說明字段包含'hellö'。 Mysql將其轉換爲'HELLö'。我想'你好'。

+1

請展後的'輸出CREATE TABLE items',在'$ input'的價值和'name'你所期望的價值相匹配。 – Quassnoi 2010-11-10 13:50:13

+0

完成! (也將其更改爲描述字段而不是名稱) – 2010-11-10 14:02:25

+0

您正在使用大小寫和區分重音敏感的'UTF8_BIN'。改用'UTF8_GENERAL_CI'。 – Quassnoi 2010-11-10 14:16:42

回答

1

這個工作對我來說:

CREATE TABLE items (id INT NOT NULL, name VARCHAR(100) COLLATE UTF8_GENERAL_CI) ENGINE=InnoDB; 

INSERT 
INTO items 
VALUES (1, 'Eyjafjallajökull'); 

SELECT * 
FROM items 
WHERE name = 'EYJAFJALLAJOKULL'; 

-- 
1  Eyjafjallajökull 

SELECT UPPER('Eyjafjallajökull') 
FROM items; 

-- 
EYJAFJALLAJÖKULL 
+0

但這不是他的觀點。如果我正確地理解了他,他的問題是'UPPER(「Eyjafjallajökull」)'返回'EYJAFJALLAJöKULL' – 2010-11-10 13:55:40

+0

但是一想到,這當然修復了他的初始需求,所以+1 :) – 2010-11-10 13:56:36

+0

奇怪的是,這對我也適用。也用MyISAM代替InnoDB。我不明白區別。 – 2010-11-10 14:13:35