乙個程序執行了整整一天還沒結束,本來應該只需要半天左右就可以全部build完成了,一步一步查原因,發現在uniq處理全形字符的問題上。
先看下面這個現象
[root@localhost build]$ cat text
12580
10086
20086
58000858
[root@localhost build]$ uniq text
12580
5805
[root@localhost build]$
這個輸出,明顯不是想要的,這主要是全形字符所帶來的問題
在很多資料處理時,可能資料都是**於使用者的輸入,所以這時一些全形字符或者是大小寫不一致的問題,就隨處可見了,大小寫的問題很容易想到要處理,全形字符也是需要處理或者設定處理環境的。
uniq命令在判斷兩個字串是否相等的時候,和lc_all這個環境變數是有很大關係的,如果將其設定為utf8,那麼有可能一些不同的字元被判斷為相同的。我們可以把這個環境變數的值設定為c,這樣的話uniq就會乙個乙個位元組的對兩個字串進行比較,這也是我們想要的結果和方式。
如下:
[root@localhost build]$ export lc_all=c
[root@localhost build]$ uniq text
12580
10086
20086
58000858
[root@localhost build]$
coreseek檢索時全形字符對全文檢索質量的影響
近來試用一段時間後,發現一些全形字符,尤其是雙引號,書名號對英文的影響有些嚴重.比如搜尋php時,出來的前幾條中都沒有php詞樣.經過一段時間觀察,發現這些出現異常的內容裡,都帶有這些全形符號.李沫南說其它應用 未發現這個狀態.但我這兒兩台測試機都已發生此現象.詳細內容還得觀察一段時間.目前只能暫時...
MySQL儲存全形字符和半形字元的區別
很不巧公司內測im的時候又遇到mysql data truncated錯誤,日誌記錄還是在mysql stmt fetch呼叫的時候出現的。鑑於之前的經驗,應該是給定的結果集繫結區域長度不夠造成的,反覆www.cppcns.com檢查了好多遍沒發現問題。我在 中都是對應的關係,比如char 20 我...
oracle判斷漢字和全形字符的方法 轉
最近由於單位提了乙個需求,要判斷提供的使用者名稱裡不有全形字符,至少有兩個漢字。找了半天,想通過正規表示式來解決,但測試了好久才發現,oracle 的正則函式regexp like 不支援 un 匹配 n,其中 n 是以四位十六進製制數表示的 unicode 字元 的判斷,例如,u00a9 匹配版權...