這個字符無法通過輸入法等方法輸入,甚至可能根本無法在你的系統上正確顯示,或者它壓根就是一個不可見字符。那麼如何把這樣一個字符插入到數據庫(數據庫該字段的編碼已經指定爲utf8)呢?
----------------------
一種方法是藉助編程語言。python、java、objective-c等編程語言都提供了使用code point來表達一個UNICODE字符的方法。
這裏我們以希臘字母β來舉例。這個字符的UNICODE code point是03B2,UTF-8編碼是CE B2。在各種編程語言中可以方便地表達它:
Python:u'\u03b2'
Java: "\u03B2"
Objective-C: @"\u03B2"
在編程語言中直接產生想要的字符,然後傳遞到SQL中執行即可。
第二種方法是直接在mysql工具或者客戶端的命令行進行。我們需要首先獲得該字符的UTF-8編碼。可以從一些在線工具中查得,如:
http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=03B2&mode=hex
可知β的UTF-8編碼爲CE B2。然後我們執行這樣一條SQL(假設所用的數據庫字符集編碼是utf-8):
INSERT INTO my_tbl (my_col) VALUES (UNHEX('CEB2'));
就可以直接將β加入數據庫了。
這裏爲了方便描述以可見字符β來舉例。這些方法還可以處理不可見字符。如果只是處理可見字符,用功能齊全點的輸入法就可以了。
如果需要輸入的unicode字符屬於BMP平面之外的(碼點超出了FFFF的範圍。這種字符使用UTF-8編碼或者UTF-16編碼都需要使用四個字節),那麼可以在編程語言裏使用它的UTF-16編碼表示。
例如對字符U+1F51F(是數字10),它的UNICODE code point是1F51F,UTF-8編碼是F0 9F 94 9F,UTF-16編碼是D83D DD1F。在編程語言裏可以這樣表達它:
Python: u'\ud83d\udd1f'
而在SQL中,可以這樣寫(假設所用的數據庫字符集編碼是utf-8,並且支持BMP平面之外的unicode字符。對MySQL,必須選utf8mb4,不能用utf8):
INSERT INTO my_tbl (my_col) VALUES (UNHEX('F09F949F'));