2010-09-14 74 views
2

我正在處理從文本文件導出數據到mysql數據庫的項目 文本文件包含拉丁文和西里爾文字母。 這裏是錯誤:MySQL SELECT編碼問題(西里爾文,大概)

select * from cues where data =「ГЭС」;
+ ------ + ------ +
| id |數據|
+ ------ + ------ +
| 1872 | АЭС|
| 4671 | ГЭС|
+ ------ + ------ +

爲什麼我會得到「АЭС」呢?在查詢中有「ВЭС」,「БЭС」,但不是「ФЭС」(我在表中沒有這些值,但是在「ВЭС」,「БЭС」的情況下,查詢返回的結果與「ГЭС」,如果是「ФЭС」,則不返回任何內容)。

我唯一的意見是,問題是與編碼。

回答

2

有兩件事需要考慮:整理和編碼。

編碼確定如何將字節流解釋爲文本字符,即字節序列如何映射到代碼點。我更喜歡使用UTF-8來處理所有事情,但是一些遺留系統或外部組件可能會迫使您在其他編碼之間進行轉換。

排序規則設置比較和排序的規則。每個表都有一個默認的排序規則,但如果需要,也可以根據每個查詢覆蓋它。根據排序規則,給定的一對字符可能被認爲相等或不相等;例如,不區分大小寫的整理會將'a'和'A'視爲相等,而區分大小寫的則不會。

因此,要解決您的問題,您需要爲表格設置正確的排序規則,並確保對錶格和連接使用正確的編碼。