2012-09-11 23 views
0

我知道答案很簡單,但我要去香蕉。我想我已經嘗試了所有可用的解決方案。在這裏,我們去...MySQL的字符集和拼字:不區分變音不起作用

我有一個字符集LATIN1的數據庫。是的,我應該在utf8,但我有幾個正在運行的項目,所以我不想惹他們。

問題帶有SELECTLIKE "%...%"

表是UTF8與COLLATE utf8_general_ci。這些字段也是使用utf8_general_ci歸類的utf8。我的腳本文件(php)是utf-8編碼的,服務器也以utf-8格式提供文件。所以,一切都是utf-8。

好吧,因爲所有內容都與utf8_general_ci整理,所以我應該能夠搜索不區分大小寫和重音漸變。例如:

具有表providers ...

id  providerName 
1  Jose 
2  José 

我應該能夠做到......

SELECT * FROM providers WHERE providerName LIKE "%jose%" 

SELECT * FROM providers WHERE providerName LIKE "%josé%" 

而且有,在這兩個情況下,兩行返回。但是,在第一個查詢中,我只得到第1行;和第二個查詢,我只得到第二行。不區分大小寫的搜索似乎工作正常,但不區分重音不會。

所以我試着在LIKE "%...%"之後加了COLLATE utf8_general_ci。同樣的結果。

然後,我發現連接是在latin1中進行的(通過PHP函數mysql_client_encoding())。所以每次建立連接時都添加一個查詢,指示使用utf8。我使用了SET NAMES UTF8 COLLATE utf8_general_ci和php的mysql_set_charset()。當我添加此配置時,第一個查詢返回第1行,但第二個查詢不返回任何結果。另外,所有的結果都會返回罕見的字符(你知道,就像ð一樣,即使全部設置爲utf8)。

這是我的插件。所有內容都以UTF8格式設置,但不能像我所期望的那樣工作。

MySQL Server 5.0.95 
PHP 5.2.14 
Win7 
+0

看看這個:http:// stackoverflow。com/questions/12242493/php-pdo-database-error-special-characters – 2012-09-11 03:03:25

+0

最後一部分聽起來像是你實際上在數據庫中存儲了錯誤編碼的垃圾。請參閱[在Web應用程序中處理Unicode前後](http://kunststube.net/frontback/)。 – deceze

回答

2

停止機器!

我發現我做的一切都OK,並且它按照預期做出了響應。唯一的問題是,即使表格,字段,文件和服務器在utf8中,表格被填充時(過去的一段時間),連接也是由latin1完成的。

所以我重新填充表,現在用utf8連接,它工作得很好。

謝謝你們!

相關問題