簡體   English   中英

MySQL字符集和排序規則:重音不敏感不起作用

[英]MySQL charsets and collations: accent insensitive doesn't work

我知道答案很簡單,但我要去香蕉。 我想我已經嘗試了所有可用的解決方案。 開始了...

我有一個帶charset latin1的數據庫。 是的,我應該在utf8中使用它,但我有幾個正在運行的項目,所以我不想弄亂它們。

SELECTLIKE "%...%"

該表是帶有COLLATE utf8_general_ci的utf8。 這些字段也是utf8,帶有utf8_general_ci排序規則。 我的腳本文件(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中進行的(víaPHP函數mysql_client_encoding() )。 所以每次建立連接時我都會添加一個查詢,表示使用utf8。 我使用了SET NAMES UTF8 COLLATE utf8_general_ci和php的mysql_set_charset() 當我添加此配置時,第一個查詢返回第1行,但第二個查詢不返回任何結果。 此外,所有結果都返回稀有字符(你知道,就像ð,即使所有結果都設置為utf8)。

這讓我眼花繚亂。 一切都是用UTF8設置的,但它不能像(I)期望的那樣工作。

MySQL Server 5.0.95
PHP 5.2.14
Win7

停止機器!

我發現我做的一切都很好,而且它按預期做出了反應。 唯一的問題是,即使表,字段,文件和服務器都在utf8中,當表填充時(過去的某個時間),連接也是用latin1進行的。

所以我重新填充了表,現在使用utf8連接,它運行得很好。

感謝大伙們!

我沒有正確測試的設置,但這是一個可能的解決方案 這么多地方設置UTF8! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM