Chcę wstawić rekord do MySQL, który ma znak Unicode w standardzie innym niż ASCII, ale jestem na terminalu, który nie pozwala mi łatwo wpisywać znaków spoza ASCII. Jak mogę uniknąć literału Unicode w składni SQL MySQL?Literały w Unicode MySQL
Odpowiedz
Patrz: http://bugs.mysql.com/bug.php?id=10199 (Bug # 10199: "Pozwól sekwencję escape Unicode dla napisowych"). Wniosek ten został "Open" od 2005 roku
Od http://eng.kaching.com/2009/10/mysql-unicode-escape-sequences.html choć można zobaczyć następujący przykład , który faktycznie działa, ale wymaga znajomości aktualnego kodowania kodowania UTF8 bajt po bajcie:
"Można również użyć reprezentacji UTF-8 o zmiennej długości (wygodnej, gdy na przykład kopiowanie z utf-8 zakodowana wartość URL jak% E2% 80% 98). "
mysql> select _utf8 x'E28098';
+---+
| ‘ |
+---+
Funkcja ta zapewnia funkcjonalność przechowywane MySQL jest (podobno) brakuje, ze taki sposób, aby włączyć literalnego punktu kodeksu w charakterze bez konieczności już znać kodowanie UTF-8.
Jeśli VARCHAR(1)
wydaje się dziwne, ponieważ znaków UTF8 w MySQL może mieć długość do 3 bajtów, należy pamiętać o wielkości od VARCHAR
jest znaków, nie bajtów. Funkcja zwraca pojedynczy znak UTF-8 z wartości wejściowej.
W przypadku heksadecymalnych literałów należy dodać 0x
.
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 ;
Przykâadowa:
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. Jak odkodować surowe literały Unicode na czytelny ciąg?
- 2. Literały XML w JavaScript?
- 3. Literały dat w Hibernate
- 4. Literały obiektów w Javie
- 5. Szablon literały z zagnieżdżonych backticks (`) w ES6
- 6. Różnica między kierowcami ANSI i Unicode MySQL
- 7. Słownik literały w Mako wyrażenia
- 8. Literały Idris Nat w typach
- 9. Python i MySql: Unicode i kodowanie
- 10. Python z problemami z Unicode MySql
- 11. Literały funkcji Clojure
- 12. Operatorzy jak literały funkcyjnych
- 13. Dlaczego niektóre literały znaków powodują błędy składni w Javie?
- 14. Jak pisać literały binarne w Scali?
- 15. Usuń #inst i #uuid literały w clojure
- 16. W jaki sposób tworzone są literały łańcuchowe?
- 17. Literały ósemkowe są niedozwolone w trybie ścisłym.
- 18. binarne literały ciągów w Ruby 2.0
- 19. W jaki sposób Frege generalizuje literały liczbowe?
- 20. @ "" Literały typu ciągów dla NSNumber
- 21. Czy literały obiektowe są Pythoniczne?
- 22. Języki programowania obsługujące literały XML
- 23. Znak Unicode o symbolu Unicode
- 24. Unicode w PHP JSON
- 25. Postać w Unicode: koszyk
- 26. Unicode w Rhino
- 27. Unicode w Git alias
- 28. Physical Boost.Units Deficytowane przez użytkownika literały
- 29. C++: generowanie literały ciągów z szablonu Parametry
- 30. Wcięcia literały Objective-C z Xcode
Dostaję trochę poza podrażniona przez losową głupoty drive-by, który bez komentarza, ODPOWIEDZI dół uznali, że są oczywiście poprawne and-down wyborców oczywiście praca. Jeśli nie masz wystarczających umiejętności, by zrozumieć odpowiedź i wyjaśnić swój sprzeciw, przynajmniej przestań to pokazywać. –
działa dobrze, dzięki –