MySQL
Set di caratteri e regole di confronto
Ricerca…
Dichiarazione
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
Connessione
È fondamentale utilizzare i set di caratteri per dire al server MySQL quali sono i byte del client. Ecco un modo:
SET NAMES utf8mb4;
Ogni lingua (PHP, Python, Java, ...) ha il suo modo di preferire solitamente SET NAMES
.
Ad esempio: SET NAMES utf8mb4
, insieme a una colonna dichiarata CHARACTER SET latin1
- questo convertirà da latin1 a utf8mb4 quando INSERTing
e converti indietro quando SELECTing
.
Quale SET DI CARATTERE e COLLEZIONE?
Ci sono dozzine di set di caratteri con centinaia di regole di confronto. (Una determinata fascicolazione appartiene a un solo set di caratteri.) Vedere l'output di SHOW COLLATION;
.
Di solito ci sono solo 4 CHARACTER SETs
che contano:
ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8. This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.
Tutti includono caratteri inglesi, codificati in modo identico. utf8 è un sottoinsieme di utf8mb4.
La migliore pratica...
- Usa utf8mb4 per qualsiasi colonna
TEXT
oVARCHAR
che può contenere una varietà di lingue. - Usa ascii (latin1 è ok) per stringhe esadecimali (UUID, MD5, ecc.) E codici semplici (country_code, codice_postale, ecc.).
utf8mb4 non esisteva fino alla versione 5.5.3, quindi utf8 era il migliore disponibile prima.
Fuori da MySQL , "UTF8" significa le stesse cose di utf8mb4 di MySQL, non di utf8 di MySQL.
Le regole di confronto iniziano con il nome charset e di solito terminano con _ci
per "case e accento insensibile" o " _bin
for" per confrontare semplicemente i bit.
L'ultima collazione utf8mb4_unicode_520_ci
è utf8mb4_unicode_520_ci
, basata su Unicode 5.20. Se stai lavorando con una sola lingua, potresti, ad esempio, utf8mb4_polish_ci
, che riorganizzerà leggermente le lettere, in base alle convenzioni polacche.
Impostazione dei set di caratteri su tabelle e campi
È possibile impostare un set di caratteri sia per tabella, sia per singolo campo utilizzando le istruzioni CHARACTER SET
e CHARSET
:
CREATE TABLE Address (
`AddressID` INTEGER NOT NULL PRIMARY KEY,
`Street` VARCHAR(80) CHARACTER SET ASCII,
`City` VARCHAR(80),
`Country` VARCHAR(80) DEFAULT "United States",
`Active` BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;
City
e Country
utilizzeranno UTF8
, poiché lo impostiamo come set di caratteri predefinito per la tabella. Street
d'altra parte, userà ASCII
, come gli abbiamo detto specificamente di farlo.
L'impostazione del giusto set di caratteri dipende in gran parte dal set di dati, ma può anche migliorare notevolmente la portabilità tra i sistemi che lavorano con i dati.