2014-01-07 25 views
0

使用left()或substring()我可以得到前2個字節,它不等於前2個字符。如何從mySQL中的字符串中提取前2個字符?

使用PhpMyadmin,這是當我瀏覽表中的字符串值時看到的: %D8%A3%D8%B9%D8%B7%D9%8A。 這相當於阿拉伯語字詞

這是SHOW VARIABLES LIKE'char%'的輸出;

character_set_client utf8 
character_set_connection utf8 
character_set_database utf8 
character_set_filesystem binary 
character_set_results utf8 
character_set_server utf8 
character_set_system utf8 
character_sets_dir /usr/share/mysql/charsets/ 

我正在使用collat​​ion:utf8_general_ci作爲表和列。

+0

從手冊:「*返回最左邊的len字符...此函數是**多字節安全***」。 –

+0

我正在使用這個子字符串函數,如下所示:從sc_services中選擇substring(substring_index(url,'/', - 1),1,200) ,但返回的值顯然是錯誤的,因爲結果字符串以%D結尾,而它應以%D1或%D2結尾。在百分號後面必須有2個字符。 –

+0

如果你的數據庫中有你在這裏顯示的內容,例如你沒有正確使用utf8,看起來你正在將一個utf8表存儲在一個utf8表中,如果你正在存儲數據,你會得到可讀的輸出&我想子字符串可以爲你工作得很好。 – ahmad

回答

0

「%D8%A3%D8%B9%D8%B7%D9%8A」是URL編碼數據。您應該將文本存儲爲文本,而無需任何其他編碼,以便可以由數據庫處理。也就是說,當你在phpMyAdmin中查看錶格中的數據時,你應該看到的是數據而不是%D8%A3%D8%B9%D8%B7%D9%8A。

在MySQL中沒有內置函數來解碼這種格式的數據。您可以使用define a stored function來解碼,或者使用您在客戶端軟件中使用的編程語言中定義的函數,例如PHP中的urldecode或Java中的URLDecoder類。

相關問題