ASCII olmayan bir Unicode karakterine sahip MySQL'e bir kayıt eklemek istiyorum, ancak ASCII olmayan karakterleri kolayca yazmama izin veren bir terminalde yaşıyorum. MySQL'in SQL sözdizimindeki Unicode literalinden nasıl kurtulurum?MySQL unicode literals
cevap
Bkz: http://bugs.mysql.com/bug.php?id=10199 (Bug # 10199: "dize hazır Unicode kaçış dizisi izin verin.") aşağıdaki örnek görebilirsiniz olsa Bu istek http://eng.kaching.com/2009/10/mysql-unicode-escape-sequences.html itibaren 2005
beri "Aç" olmuştur hangi aslında çalışmak gibi görünüyor, ama gerçek bayt-bayt UTF8 kodlaması bilmek gerektirir:
"Ayrıca gelen zaman, örneğin, kopyalama uygun değişken uzunlukta UTF8 temsilini (kullanabilirsiniz utf-8 URL kodlu değer% E2% 80% 98 gibi. "
mysql> select _utf8 x'E28098';
+---+
| ‘ |
+---+
Bu saklı fonksiyon zaten UTF-8 kodlamasını bilmek zorunda kalmadan bir karaktere dönüştürür değişmez kod noktasını açmak için bir yol, eksik (görünüşte) MySQL işlevsellik sağlar. MySQL utf8 karakterleri, en fazla 3 bayt uzunluğunda olması VARCHAR
karakter değil bayt olduğunu boyutunu bildim bileli
VARCHAR(1)
ise garip görünüyor. İşlev, giriş değerinden tek bir UTF-8 kodlu karakter döndürür.
Onaltılık literaller için 0x
'u ekleyin.
DELIMITER $$
DROP FUNCTION IF EXISTS `utf8_char` $$
CREATE FUNCTION `utf8_char`(v smallint unsigned) RETURNS VARCHAR(1) CHARSET utf8
NO SQL
DETERMINISTIC
BEGIN
-- http://stackoverflow.com/questions/3632410/mysql-unicode-literals/30675371#30675371
RETURN CHAR(CASE
WHEN v <= 0x7F THEN v
WHEN v <= 0x7FF THEN 0xC080 | ((v >> 6) << 8) | (v & 0x3F)
WHEN v <= 0xFFFF THEN 0xE08080 | (((v >> 12) & 0x0F) << 16) | (((v >> 6) & 0x3F) << 8) | (v & 0x3F)
ELSE NULL END);
END $$
DELIMITER ;
Örnek çıkışı:
mysql> select utf8_char(8592) AS 'leftwards_arrow';
+-----------------+
| leftwards_arrow |
+-----------------+
| ← |
+-----------------+
1 row in set (0.00 sec)
mysql> select utf8_char(0x2192) AS 'rightwards_arrow_hex';
+----------------------+
| rightwards_arrow_hex |
+----------------------+
| → |
+----------------------+
1 row in set (0.00 sec)
- 1. Verbatim Literals? (C# 's @ "blah" gibi)
- 2. Scala XML: literals kullanmayan bir düğüm oluşturmak
- 3. Unicode
- 4. Django unicode Çok dilli
- 5. Python - mysqldb takma unicode hatası
- 6. Unicode karakteri için Python unicode kod noktası
- 7. Kaçınan unicode karakterleri unicode gösterimine dönüştürme
- 8. Unicode unicode, UnicodeDecodeError'ı günlüğe kaydetme (App Engine)
- 9. Unicode tanımlayıcıları?
- 10. Unicode karakterler
- 11. Python: Unicode
- 12. Android'de Unicode
- 13. Python unicode
- 14. Type Level Literals - İkili işlevde farklı yazılan parametreler kullanılamıyor
- 15. ES6 Dize Literals/Typescript ile Chrome Dev Tools Sorunu
- 16. Piton unicode ve unicode olmayan tuple eşit olarak nasıl davranabilir?
- 17. En yüksek Unicode karakteri?
- 18. Unicode değerlerini System.in'den alma
- 19. Unicode bitişik karakterleri ayırma
- 20. Base64ing Unicode karakterler
- 21. Java Dize Unicode Değeri
- 22. Unicode olmayan XML gösterimi
- 23. Python Unicode kodlama hatası
- 24. Selenium webdriver ve unicode
- 25. A Unicode Maven ArtifactId
- 26. Unicode ve Django admin
- 27. JTextArea Bileşeninde Unicode Desteği
- 28. IOS emoji unicode listesi
- 29. Unicode kod noktasını Ruby
- 30. Tamilde Unicode sri karakteri
Ben arabadan açılan, yorum yapmadan, aşağı-oy besbelli doğru cevaplar ve-seçmenlerin aşağı rastgele aptallık rahatsız ötesinde biraz alıyorum Açıkçası işe yarıyor. Cevabı anlamak ve itirazınızı açıklamak için yeterli beceriye sahip değilseniz, en azından bunu göstermeyi bırakın. –
iyi çalışıyor, teşekkürler –