2016-01-23 49 views
0

我從我的MySQL數據庫中顯示俄語數據時遇到了一些問題。背景:一些其他程序員創建了數據庫,我現在負責它。俄語中的一些SQL數據在末尾用符號outputted輸出

我的問題: 在HTML頁面上輸出我的數據庫中的語句列表。這些陳述都是俄羅斯人。在所有80條語句中,有6條語句在其末尾輸出帶有白色問號的黑色圖標( )。

常見的事情(!!!)是問號總是出現在聲明的結尾,聲明最長,大約80個字符。

這纔是我的HTML網頁上的一些語句的列表:

  • Ядействуюскорееактивно,агрессивнои,думаяосвоейвыгоде
  • Какинтровертныйсвоенравныйчеловек,которыйдемонстрируетмалособственнойин
  • Являешьсяубедительным,располагающимицелеустремленным
  • Ядемонстрируюразумиясность,объективностьилогику
  • Кого-то,ктосамостоятельномыслитизнает,каксебепомочь
  • Томнеследовалобысдержаннореагироватьинайтидругойпуть,чтобыполучитьбол

我看了一下數據庫到我的表「語句」,發現這些語句被保存爲不可識別的字符。例如,對於上面的第二俄語語句(在末端包含問號符號)所保存的表項如下:

dÐ'ÐμйÑÑ,вуюÑкорÐμÐμÐ'овÐμÑ€DN ,Ðμльноd окаd·N <ваNZÑвоÐμÐ'овÐμриÐμÑ,акжÐμÐ'ругим, коÑ,орÑ<ÐμкнÐμÐ

關於表格:它的整理是utf8_unicode_ci與領域有VARCHAR(150)作爲數據類型。

我的問題:

  1. 爲什麼報表保存在我的表,這些unidentifable信嗎?我如何將它們轉換爲俄語?
  2. html輸出中問號符號的原因是什麼?我怎樣才能擺脫它?

編輯:

在同一個項目中,我發現了另一個問題,我在一個單獨的職位描述。也許這個問題與它有關?

PHP: Special char becomes question mark icon in substring

+0

「語句被保存爲不可識別的字符。」 - 你確定它不是顯示問題嗎?數據存儲在UTF8中,但它似乎是通過您使用的任何工具在CP1251中顯示給您的。 – Timekiller

+0

是的,可能是顯示問題。我怎樣才能擺脫這個問題? – Max

+0

似乎你需要利用utf8整理你的表。 – ameenulla0007

回答

0

這聽起來像一個簡單的截斷問題。 Varchar(150)表示字段最大爲150 字節。 UTF8每個符號可以使用多個字節 - 例如,西里爾文中的每個字母將使用2個字節,而空格或逗號符號則使用1個字節。所以如果字符串長度超過150字節,則可能是西裏爾字母在中間被截斷。例如,在第二句中,小и有utf8代碼d0 b8,但被截斷爲d0這是不可打印的符號,導致您看到?。你無能爲力,數據已經丟失。您只能通過從字符串末尾刪除C2..DF範圍內的獨立字節來美化顯示。

至於你看到的身份不明的信件,有很多因素。數據庫編碼,連接編碼,表格整理和顯示編碼(如果您使用的是Web界面)都會造成混亂,在看到它之前可能會對該字符串進行多重編碼。數據在插入之前以某種方式進行重新編碼,並在顯示之前進行解碼也是可能的 - 不是我在遺留代碼中看到的最糟糕的事情。你必須嘗試自己找到適當的組合。

+0

你好Timekiller,非常感謝你的回答。什麼是快速解決問題的措施?增加未來插入的varchar?在我的情況下,如何從字符串的末尾刪除獨立字節? – Max

+0

是的,增加字段大小,然後看看'mb_strcut()'函數 - 根據手冊,它允許將字符串剪切爲N字節而不破壞多字節字符序列,這正是您需要的。要替換無效的utf8字符,請查看http://stackoverflow.com/a/13695364/1375470 - 儘管在特定情況下,用空字符串替換regexp'[\ xC2- \ xDF] $'可能就足夠了。 – Timekiller

+0

我剛剛發現varchar(150)是不夠的。我會將它增加到300.當增加每場時,可能會有負面影響嗎? – Max

1

利用'SET names=utf8'查詢而插入,問題是,在輸入(插入),數據被轉換成一些特殊字符。

所以如果你使用這個,你輸入的數據是用俄語輸入的,同樣的數據也會被添加到數據庫中。 並且在檢索時您將得到與您輸入相同的結果。

+0

這是否意味着我的數據庫中已存在的數據不知何故丟失,無法轉換以獲取問號圖標?用於新插入數據的 – Max

+0

。 – ameenulla0007

+0

http://php.net/manual/en/function.htmlspecialchars-decode.php查看本教程,將特殊或不需要的字符轉換爲有效的字符串。 – ameenulla0007

相關問題