如何使用SQL向mysql中插入一個特定UNICODE碼值的字符

這個字符無法通過輸入法等方法輸入,甚至可能根本無法在你的系統上正確顯示,或者它壓根就是一個不可見字符。那麼如何把這樣一個字符插入到數據庫(數據庫該字段的編碼已經指定爲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'));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章