-
SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 18:31:59.0 alle 2014-10-01 18:31:59.0Cosa è meglio scegliere? utf8, 16 o 32?
-
Re: SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 18:58:16.0 alle 2014-10-01 18:58:16.0Cosa è meglio scegliere? utf8, 16 o 32?
Ad esempio:
utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...-
Re: SQL : create database : collationScritto da:
> Cosa è meglio scegliere? utf8, 16 o 32?
>
> Ad esempio:
>
> utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
> utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
>
> Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
Ha detto che li considera equivalenti solo nel sort
> Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...
Di che DBMS parli?Young professional woman and busy mom.-
Re: SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 19:06:37.0 alle 2014-10-01 19:06:37.0Scritto da: ::1
> Scritto da:
> > Cosa è meglio scegliere? utf8, 16 o 32?
> >
> > Ad esempio:
> >
> > utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
> > utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
> >
> > Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
>
> Ha detto che li considera equivalenti solo nel sort
Ci stavo giusto pensando. Del resto chi ha programmato il malloppo avrà tenuto conto di questi problemi, no?
Al momento propenderei per utf8_unicode_ci.
> > Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...
>
> Di che DBMS parli?
MySQL.
Ho comprato uno script eBay Clone con la maggior parte delle caratteristiche che mi servono, e GPL2. Sto provando a installarlo nella macchina virtuale di Turnkey LAMP.-
Re: SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 19:24:43.0 alle 2014-10-01 19:24:43.0Scritto da:
> Scritto da: ::1
> > Scritto da:
> > > Cosa è meglio scegliere? utf8, 16 o 32?
> > >
> > > Ad esempio:
> > >
> > > utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
> > > utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
> > >
> > > Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
> >
> > Ha detto che li considera equivalenti solo nel sort
>
> Ci stavo giusto pensando. Del resto chi ha programmato il malloppo avrà tenuto conto di questi problemi, no?
>
> Al momento propenderei per utf8_unicode_ci.
Ma ad esempio ha anche ragione questo:
I always use utf8_bin because of the problem highlighted by Guus. In my opinion, as far as the database should be concerned, a string is still just a string. A string is a number of UTF-8 characters. A character has a binary representation so why does it need to know the language you're using? Usually, people will be constructing databases for systems with the scope for multilingual sites. This is the whole point of using UTF-8 as a character set. I'm a bit of a pureist but I think the bug risks heavily outweigh the slight advantage you may get on indexing. Any language related rules should be done at a much higher level than the DBMS.
E poi perché utf8 e non 16 o 32?
Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
Ma non vorrei nemmeno introdurre rallentamenti nel nome di improbabili estensioni a utenti cinesi, giapponesi eccetera (che non visiteranno mai il mio sito).
> > > Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...
> >
> > Di che DBMS parli?
>
> MySQL.
>
> Ho comprato uno script eBay Clone con la maggior parte delle caratteristiche che mi servono, e GPL2. Sto provando a installarlo nella macchina virtuale di Turnkey LAMP.
-
Re: SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 19:33:53.0 alle 2014-10-01 19:33:53.0Scritto da:
> Scritto da:
> > Scritto da: ::1
> > > Scritto da:
> > > > Cosa è meglio scegliere? utf8, 16 o 32?
> > > >
> > > > Ad esempio:
> > > >
> > > > utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
> > > > utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
> > > >
> > > > Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
> > >
> > > Ha detto che li considera equivalenti solo nel sort
> >
> > Ci stavo giusto pensando. Del resto chi ha programmato il malloppo avrà tenuto conto di questi problemi, no?
> >
> > Al momento propenderei per utf8_unicode_ci.
>
> Ma ad esempio ha anche ragione questo:
>
> I always use utf8_bin because of the problem highlighted by Guus. In my opinion, as far as the database should be concerned, a string is still just a string. A string is a number of UTF-8 characters. A character has a binary representation so why does it need to know the language you're using? Usually, people will be constructing databases for systems with the scope for multilingual sites. This is the whole point of using UTF-8 as a character set. I'm a bit of a pureist but I think the bug risks heavily outweigh the slight advantage you may get on indexing. Any language related rules should be done at a much higher level than the DBMS.
>
> E poi perché utf8 e non 16 o 32?
> Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
>
> Ma non vorrei nemmeno introdurre rallentamenti nel nome di improbabili estensioni a utenti cinesi, giapponesi eccetera (che non visiteranno mai il mio sito).
Ma anche
Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
Appena aperto phpmyadmin e già incerto su cosa prendere per colazione.
-
Re: SQL : create database : collationScritto da:
>
> Ma anche
>
> Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
>
> Appena aperto phpmyadmin e già incerto su cosa prendere per colazione.
>
Se non hai mysql 5.5+ preoccupati di questo
; sul fdt abbiamo dovuto fare un workaround
ad hoc per postare questo carattere 💩 
**Modificato dall'autore il 01.10.2014 21:11**Young professional woman and busy mom.-
Re: SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 21:39:53.0 alle 2014-10-01 21:39:53.0Scritto da: ::1
> Scritto da:
> >
> > Ma anche
> >
> > Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
> >
> > Appena aperto phpmyadmin e già incerto su cosa prendere per colazione.
> >
>
> Se non hai mysql 5.5+ preoccupati di questo
;
mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2
> sul fdt abbiamo dovuto fare un workaround
ad hoc per postare questo carattere 💩 
Non bastava
?
-
Re: SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 21:44:56.0 alle 2014-10-01 21:44:56.0Scritto da:
> Scritto da: ::1
> > Scritto da:
> > >
> > > Ma anche
> > >
> > > Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
> > >
> > > Appena aperto phpmyadmin e già incerto su cosa prendere per colazione.
> > >
> >
> > Se non hai mysql 5.5+ preoccupati di questo
;
>
> mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2
>
> > sul fdt abbiamo dovuto fare un workaround
ad hoc per postare questo carattere 💩 
>
> Non bastava
?
Quindi dovrei usare utf8mb4?
Ormai ho scelto utf8_general_ci
Mi ha convinto questo post:
Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
Va bè che si tratta solo di un test, che ha lo scopo:
- di imparare a installare il robo;
- di vedere a quante e quali grane vado incontro.
-
-
-
-
Re: SQL : create database : collationScritto da:
> E poi perché utf8 e non 16 o 32?
> Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
Anche l'alfabeto latino supera gli otto bit in utf8.
Infatti essendo un encoding a larghezza del carattere variabile viene usato un byte per l'ascii, e più byte per tutto il resto.
Es: in utf8 il carattere 'a
' è la sequenza di bit 01100001; il carattere 'à
' è la sequenza di bit 11000011:10100000.
Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi) utilizzando un numero variabile di bytes, da 1 a 6 per ogni carattere; di conseguenza per sapere la lunghezza di una stringa encodata in utf8 non è sufficiente sapere quanti bytes la compone ma necessita analizzare tutti i bytes per sapere cosa rappresentano.
Ucs2 nasce con l'idea di avere tutti i caratteri in due bytes, rappresentando un massimo di 65536; per poter sapere la lunghezza di una stringa basta quindi dividere per 2 il numero di bytes; quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere), che unisce il peggio dei due mondi (dimensione fissa e variabile).
Utf32 invece è una character set a dimensione fissa, e rappresenta 232 caratteri; la lunghezza della stringa è data dal numero di bytes diviso per 4.Young professional woman and busy mom.-
Re: SQL : create database : collationScritto daavvelentaniCubicolarioil 2014-10-01 21:47:41.0 alle 2014-10-01 21:47:41.0Trollate totali: 18184Scritto da: ::1
> Scritto da:
> > E poi perché utf8 e non 16 o 32?
> > Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
>
> Anche l'alfabeto latino supera gli otto bit in utf8.
> Infatti essendo un encoding a larghezza del carattere variabile viene usato un byte per l'ascii, e più byte per tutto il resto.
> Es: in utf8 il carattere 'a
' è la sequenza di bit 01100001; il carattere 'à
' è la sequenza di bit 11000011:10100000.
> Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi) utilizzando un numero variabile di bytes, da 1 a 6 per ogni carattere; di conseguenza per sapere la lunghezza di una stringa encodata in utf8 non è sufficiente sapere quanti bytes la compone ma necessita analizzare tutti i bytes per sapere cosa rappresentano.
> Ucs2 nasce con l'idea di avere tutti i caratteri in due bytes, rappresentando un massimo di 65536; per poter sapere la lunghezza di una stringa basta quindi dividere per 2 il numero di bytes; quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere), che unisce il peggio dei due mondi (dimensione fissa e variabile).
> Utf32 invece è una character set a dimensione fissa, e rappresenta 232 caratteri; la lunghezza della stringa è data dal numero di bytes diviso per 4.
ci sono alcuni errori qui C-I think happiness is love
- Vladimir Putin-
Re: SQL : create database : collationScritto daNon Autenticatoil 2014-10-01 21:54:03.0 alle 2014-10-01 21:54:03.0Scritto da: avvelentani
> Scritto da: ::1
> > Scritto da:
> > > E poi perché utf8 e non 16 o 32?
> > > Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
> >
> > Anche l'alfabeto latino supera gli otto bit in utf8.
> > Infatti essendo un encoding a larghezza del carattere variabile viene usato un byte per l'ascii, e più byte per tutto il resto.
> > Es: in utf8 il carattere 'a
' è la sequenza di bit 01100001; il carattere 'à
' è la sequenza di bit 11000011:10100000.
> > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi) utilizzando un numero variabile di bytes, da 1 a 6 per ogni carattere; di conseguenza per sapere la lunghezza di una stringa encodata in utf8 non è sufficiente sapere quanti bytes la compone ma necessita analizzare tutti i bytes per sapere cosa rappresentano.
> > Ucs2 nasce con l'idea di avere tutti i caratteri in due bytes, rappresentando un massimo di 65536; per poter sapere la lunghezza di una stringa basta quindi dividere per 2 il numero di bytes; quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere), che unisce il peggio dei due mondi (dimensione fissa e variabile).
> > Utf32 invece è una character set a dimensione fissa, e rappresenta 232 caratteri; la lunghezza della stringa è data dal numero di bytes diviso per 4.
>
> ci sono alcuni errori qui C-
Tanto non l'avevo letto perché era troppo lungo
-
Re: SQL : create database : collationScritto da: avvelentani
>
> ci sono alcuni errori qui C-
Sì, ma ora devi correggerli sennò non vale.Young professional woman and busy mom.-
Re: SQL : create database : collationScritto daavvelentaniCubicolarioil 2014-10-01 22:10:05.0 alle 2014-10-01 22:10:05.0Trollate totali: 18184Scritto da: ::1
> Scritto da: avvelentani
> >
> > ci sono alcuni errori qui C-
>
> Sì, ma ora devi correggerli sennò non vale.
ok
> Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi)
i caratteri contenuti in unicode 6.0 sono poco piu` di 100.000, un milione e` il numero massimo di caratteri possibile
> da 1 a 6 per ogni carattere
da 1 a 4, le sequenze da 5 e 6 caratteri non sono mai valide
> quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere),
utf16 non usa mai (e non potra` mai usare) piu` di 4 bytes (2 unita` di encoding) per codepoint
> che unisce il peggio dei due mondi
non e` vero, utf16 e` il modo piu` efficiente di rappresentare testo cjk ed e` piu` semplice da implementare rispetto ad utf8. I vantaggi di utf8 sono altri, non hanno certo nulla a che vedere con l'essere a "lunghezza fissa" (i.e. un codepoint per unita` di encoding) perche' questa proprieta` e` sostanzialmente inutile in unicode.
I think happiness is love
- Vladimir Putin-
Re: SQL : create database : collationScritto da: avvelentani
> Scritto da: ::1
> > Scritto da: avvelentani
> > >
> > > ci sono alcuni errori qui C-
> >
> > Sì, ma ora devi correggerli sennò non vale.
>
> ok
>
> > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi)
>
> i caratteri contenuti in unicode 6.0 sono poco piu` di 100.000, un milione e` il numero massimo di caratteri possibile
>
> > da 1 a 6 per ogni carattere
>
> da 1 a 4, le sequenze da 5 e 6 caratteri non sono mai valide
>
> > quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere),
>
> utf16 non usa mai (e non potra` mai usare) piu` di 4 bytes (2 unita` di encoding) per codepoint
>
> > che unisce il peggio dei due mondi
>
> non e` vero, utf16 e` il modo piu` efficiente di rappresentare testo cjk ed e` piu` semplice da implementare rispetto ad utf8. I vantaggi di utf8 sono altri, non hanno certo nulla a che vedere con l'essere a "lunghezza fissa" (i.e. un codepoint per unita` di encoding) perche' questa proprieta` e` sostanzialmente inutile in unicode.
>
Nel mondo reale poter avere la lunghezza di una stringa guardando quanto è lunga la sequenza di bytes fa la differenza per alcuni. Ad esempio Java e ruby usano internamente utf16 per vari motivi, principalmente perché avevano scelto ucs2 e si voleva avere la lunghezza della stringa in O(1) invece di O(n); ad oggi si ritrovano con un calcolo della lunghezza della stringa sbagliato (in java dovresti usare Character.codePointCount invece di String.length, ).
Oggi si sceglie utf8 perché l'alfabeto latino è lo use case principale; banalmente una pagina html in giapponese avrà caratteri giapponesi solo nei testi, il markup, i fogli di stile e gli script sono sempre quasi completamente ascii.Young professional woman and busy mom.-
Re: SQL : create database : collationScritto daavvelentaniCubicolarioil 2014-10-01 22:33:50.0 alle 2014-10-01 22:33:50.0Trollate totali: 18184Scritto da: ::1
> Scritto da: avvelentani
> > Scritto da: ::1
> > > Scritto da: avvelentani
> > > >
> > > > ci sono alcuni errori qui C-
> > >
> > > Sì, ma ora devi correggerli sennò non vale.
> >
> > ok
> >
> > > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi)
> >
> > i caratteri contenuti in unicode 6.0 sono poco piu` di 100.000, un milione e` il numero massimo di caratteri possibile
> >
> > > da 1 a 6 per ogni carattere
> >
> > da 1 a 4, le sequenze da 5 e 6 caratteri non sono mai valide
> >
> > > quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere),
> >
> > utf16 non usa mai (e non potra` mai usare) piu` di 4 bytes (2 unita` di encoding) per codepoint
> >
> > > che unisce il peggio dei due mondi
> >
> > non e` vero, utf16 e` il modo piu` efficiente di rappresentare testo cjk ed e` piu` semplice da implementare rispetto ad utf8. I vantaggi di utf8 sono altri, non hanno certo nulla a che vedere con l'essere a "lunghezza fissa" (i.e. un codepoint per unita` di encoding) perche' questa proprieta` e` sostanzialmente inutile in unicode.
> >
>
> Nel mondo reale poter avere la lunghezza di una stringa guardando quanto è lunga la sequenza di bytes fa la differenza per alcuni.
Per chi? Fammi un esempio dov'e` utile sapere la lunghezza di una stringa come numero di codepoint nel mondo reale.
> Oggi si sceglie utf8 perché l'alfabeto latino è lo use case principale; banalmente una pagina html in giapponese avrà caratteri giapponesi solo nei testi, il markup, i fogli di stile e gli script sono sempre quasi completamente ascii.
non solo, utf8 e` autosincronizzante, non ha problemi di endianness e se ti accontenti puoi far finta che sia un semplice encoding a 8 bit e tutto funziona.I think happiness is love
- Vladimir Putin-
Re: SQL : create database : collationScritto da: avvelentani
> Per chi? Fammi un esempio dov'e` utile sapere la lunghezza di una stringa come numero di codepoint nel mondo reale.
In tutti quei casi in cui devi tagliare una stringa e hai bisogno di sapere se stai spezzando un carattere.
In java .substring ti può rompere un carattere in due.Young professional woman and busy mom.-
Re: SQL : create database : collationScritto daavvelentaniCubicolarioil 2014-10-01 22:45:29.0 alle 2014-10-01 22:45:29.0Trollate totali: 18184Scritto da: ::1
> Scritto da: avvelentani
> > Per chi? Fammi un esempio dov'e` utile sapere la lunghezza di una stringa come numero di codepoint nel mondo reale.
>
> In tutti quei casi in cui devi tagliare una stringa e hai bisogno di sapere se stai spezzando un carattere.
> In java .substring ti può rompere un carattere in due.
anche se fosse in utf32 potresti comunque rompere un carattere in due, carattere e codepoint sono due cose diverse e un carattere puo` essere composto da piu` codepoint (e un codepoint potrebbe rappresentare piu` caratteri).I think happiness is love
- Vladimir Putin-
Re: SQL : create database : collationScritto da: avvelentani
>
> anche se fosse in utf32 potresti comunque rompere un carattere in due, carattere e codepoint sono due cose diverse e un carattere puo` essere composto da piu` codepoint (e un codepoint potrebbe rappresentare piu` caratteri).
Quali sono?
Young professional woman and busy mom.-
Re: SQL : create database : collationScritto daavvelentaniCubicolarioil 2014-10-01 22:57:03.0 alle 2014-10-01 22:57:03.0Trollate totali: 18184Scritto da: ::1
> Scritto da: avvelentani
> >
> > anche se fosse in utf32 potresti comunque rompere un carattere in due, carattere e codepoint sono due cose diverse e un carattere puo` essere composto da piu` codepoint (e un codepoint potrebbe rappresentare piu` caratteri).
>
> Quali sono?
i codepoint combinanti, per i diacritici e per il coreano. E avresti anche altri problemi con caratteri di controllo bidi e con le forme di rappresentazione dell'arabo.I think happiness is love
- Vladimir Putin
-
-
-
-
-
-
-
-
-
-
-
-
-
-