2017-04-27 63 views
1

在古希臘語單詞的MySQL數據庫中(整理在utf8mb4_unicode_ci中),我試圖檢測哪些單詞是以大寫字母開頭,並在這種情況下將值1添加到字段include。我嘗試了使用二進制的幾個選項,例如MYSQL在希臘語中檢測大寫

UPDATE word 
SET include = 1 
WHERE LEFT(`lemma`, 1) REGEXP BINARY '[Α-Ω]' 

但也有其他UPPER等解決方案無效。有任何想法嗎?

+2

檢查此:http://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql – Jenish

+0

好,很好,謝謝:更新單詞SET包含= 1 WHERE BINARY LEFT(引理,1)= BINARY UPPER(LEFT(引理,1))解決了問題 – MarkD

+0

歡迎使用Stack Overflow。您可以使用[代碼示例'{}'](https://i.imgur.com/3ppJhiE.png)工具欄按鈕格式化源代碼 - 這次我已經爲您完成了。編輯器下方還有一個預覽窗格,您可以在發佈之前看到更改的樣子。 –

回答

0

REGEXP僅適用於字節,所以它在非英文字母上被擊中或未命中。

MariaDB 10.0.5有「pcre」,所以它處理utf8正則表達式。

Α-Ω是十六進制的CE91-CEA9

WHERE HEX(lemma) REGEXP '^CE' 

將檢查以希臘字母開頭。 (這將捕獲所有的΄΅Ά·ΈΉΊΌΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξο

要限制只大寫字母,Α-Ω(按照您的要求):

WHERE HEX(LEFT(lemma, 1)) BETWEEN 'CE91' AND 'CEA9' 

雖然我吧,這將檢查希臘隨時隨地lemma

WHERE HEX(lemma) REGEXP '^(..)*CE' 

(同樣假設信長名單,而不僅僅是Α-Ω。)

(我的意見適用於CHARACTER SET utf8utf8mb4;任何COLLATION。)