UTF-16 internally, such as Microsoft Windows. In Oracle Database, the character set uses CESU-8 encoding, and is deprecated. The character set uses standards-compliant UTF-8 encoding, and is preferred. CESU-8 is prohibited for use in HTML5 documents. MySQL utf8mb3 In MySQL, the character set is defined to be UTF-8 encoded data with a maximum of three bytes per character, meaning only Unicode characters in the Basic Multilingual Plane (i.e. from UCS-2) are supported. Unicode characters in supplementary planes are explicitly not supported. is deprecated in favor of the character set, which uses standards-compliant UTF-8 encoding. is an alias for , but is intended to become an alias to in a future release of MySQL. It is possible, though unsupported, to store CESU-8 encoded data in , by handling UTF-16 data with supplementary characters as though it is UCS-2. Modified UTF-8 Modified UTF-8 (MUTF-8) originated in the Java programming language. In Modified UTF-8, the null character (U+0000) uses the two-byte overlong encoding (hexadecimal ), instead of (hexadecimal ). Modified UTF-8 strings never contain any actual null bytes but can contain all Unicode code points including U+0000, which allows such strings (with a null byte appended) to be processed by traditional null-terminated string functions. All known Modified UTF-8 implementations also treat the surrogate pairs as in CESU-8. In normal usage, the language supports standard UTF-8 when reading and writing strings through and (if it is the platform's default character set or as requested by the program). However it uses Modified UTF-8 for object serialization among other applications of and , for the Java Native Interface, and for embedding constant strings in class files. The dex format defined by Dalvik also uses the same modified UTF-8 to represent string values. Tcl also uses the same modified UTF-8 as Java for internal representation of Unicode data, but uses strict CESU-8 for external data. WTF-8 In WTF-8 (Wobbly Transformation Format, 8-bit) unpaired surrogate halves (U+D800 through U+DFFF) are allowed. This is necessary to store possibly-invalid UTF-16, such as Windows filenames. Many systems that deal with UTF-8 work this way without considering it a different encoding, as it is simpler. The term "WTF-8" has also been used humorously to refer to erroneously doubly-encoded UTF-8 sometimes with the implication that CP1252 bytes are the only ones encoded. PEP 383 Version 3 of the Python programming language treats each byte of an invalid UTF-8 bytestream as an error (see