2012-09-17 56 views
0

我想將以下問題放在您面前。從數據庫中選擇並使用特殊字符的最佳方法

數據庫由各種名稱組成。這些名稱可以包含'特殊'字符,如é,ê&。

我的計劃是建立一個包含數據庫名稱的SEO友好URL。鏈接的創建不是一個大問題,只需使用normalize函數或str_replace函數將所有特殊字符替換爲正常字符即可。

但後來當我想查詢數據庫使用SEO的朋友URL(經過必要的驗證和檢查)。由於特殊字符,DB課程不返回任何結果。

現在出現了這樣的問題,有沒有一種方法來查詢數據庫沒有特殊字符,或者它會更好地在數據庫中有一個單獨的列,我存儲的名稱沒有特殊字符(少需要清理過程中鏈接的創建以及易於查詢)。這將需要維護兩列,但將允許我輕鬆查詢數據庫。

任何想法的?

+1

不要在UTF-8的一切。無需特殊處理。 – JvdBerg

+1

爲什麼Db不會返回帶有特殊字符的結果?如果您使用的是適當的字符集,則應該像其他字符一樣查詢(某些特殊字符的警告特別區分大小寫(Straße/ Strasse)) – Basic

+0

請注意,數據庫包含帶有特殊字符的名稱「hôtel」爲在數據庫中:「h ô tel」。當我查詢它時,我使用查詢字符串'hotel'。 – Ralf

回答

1

根據整理hôtel將等於hotel

mysql> select 'hôtel' = 'hotel'; 
+--------------------+ 
| 'hôtel' = 'hotel' | 
+--------------------+ 
|     1 | 
+--------------------+ 

你的問題是,你是存儲HTML實體(hôtel),我認爲這是非常錯誤的,因爲你是混合呈現的問題與持久性問題。擺脫它,並選擇適當的整理到您的字符集,然後使其數據庫默認或set it for each query

Web使用的適當字符集將是utf8。爲了set the database起來做:

create database mydatabase character set utf8 collate utf8_unicode_ci; 
+0

您可以給一個建議如何設置數據庫?你的建議是在數據庫中沒有html實體,但只是實際的字符?任何好的建議/資源,我可以在這裏找到更多的信息? – Ralf

+0

@Ralf編輯答案以包含'create database'語句。是的,我的意思是你存儲實際的字符,而不是html實體。 –

+0

在一個小測試中它的工作非常完美。似乎是最好的選擇。我需要改變我的表格,但這對網站的製作會產生很大的影響。 – Ralf

0

最簡單的方法是在URL中輸入一個ID,如URL中的Stackflow。

+0

這是我的後備,但我真的不喜歡它的視覺點。 – Ralf

+0

您可以在查詢中創建一個巨大的替換語句。 這是一次大量的工作和時間: 哪裏更換('fieldname','ô','o')='{$ sURL}' – SmartGuyz

相關問題